Nginx - Rewrite vs redirect

More often than not there are times when the initial thought process around a product changes mid way through development and one might need to change the application URL. There are two ways of implementing this change in nginx.

## Redirect from non-www to www
server {
    server_name example.com;
    # Option 1
    return 301 $scheme://$host$request_uri;
    # Option 2
    rewrite ^ http://$host$request_uri? permanent;
}

## Redirect from http to https
server {
    server_name example.com;
    # Option 1
    return 301 https://$server_name$request_uri;
    # Option 2
    rewrite ^ https://$server_name$request_uri? permanent;
}
    REWRITE
  • Only the part of the original url that matches the regex is rewritten.
  • Slower than a Return.
  • Returns HTTP 302 (Moved Temporarily) in all cases, irrespective of permanent.
  • Suitable for temporary url changes.
    RETURN
  • The entire url is rewritten to the url specified.
  • Faster response than rewrite.
  • Returns HTTP 301 (Moved Permanently).
  • Suitable for permanent changes to the url.
  • No need to set permanent.

More details on nginx can be found here