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.
1 Answer 1
alias
is likeroot
, so you need to use full server pathYou can add
break
flag torewrite
to avoid an internal redirect. Withoutbreak
Nginx will start to process all location blocks from beginning.break
tells to Nginx to use the current location instead.
I don't think there's a big difference in performance here. Main difference is changing request URI ($uri
). But in the case of serving static files both work well.
-
\$\begingroup\$ If I use the
break
flag, will it still apply the followingroot
directive in the current location? Will it process any subsequentlocation
directives? \$\endgroup\$Sonny– Sonny2014年12月12日 20:39:41 +00:00Commented Dec 12, 2014 at 20:39 -
\$\begingroup\$ Yes, break will stop rewrite module directives only. Not 100% shure about nested location, but 99% :) Easy to check. \$\endgroup\$Dmitry MiksIr– Dmitry MiksIr2014年12月12日 20:50:01 +00:00Commented Dec 12, 2014 at 20:50