Skip to main content
5 of 5
replaced http://stackoverflow.com/ with https://stackoverflow.com/

Nginx Alias vs Rewrite

I have two working configurations that, on the surface, seem to do the same thing. They both accomplish the functionality that I need:

location ~ ^/(css|images|js)/ {
    location ~ '^/(css|js)/[0-9]{8}-(.*)$' {
        alias /$1/$2;
    }
    root /server/path/to/web/root;
}

AND

location ~ ^/(css|images|js)/ {
    rewrite '^/(css|js)/[0-9]{8}-(.*)$' /$1/$2 break;
    root /server/path/to/web/root;
}

They both take a URL like /css/87654321-styles.css and deliver the file /css/styles.css. I lean toward the second solution because it's more succinct, but I don't know if one is better than the other for performance reasons, unintended side-effects, etc.

Here's my original SO post, for reference/context.

After being directed to the documentation for the Nginx rewrite module, I found these interesting lines:

The ngx_http_rewrite_module module directives are processed in the following order:

  • the directives of this module specified on the server level are executed sequentially;
  • repeatedly:
  • a location is searched based on a request URI;
  • the directives of this module specified inside the found location are executed sequentially;
  • the loop is repeated if a request URI was rewritten, but not more than 10 times.

So, if I used the rewrite directive without the break flag, there could be at least one additional loop of the server level directive.

Sonny
  • 153
  • 1
  • 6