Nested Locations Better???
Igor Sysoev
igor at sysoev.ru
Sat Feb 12 23:19:48 MSK 2011
On Sat, Feb 12, 2011 at 02:33:31PM -0500, Dayo wrote:
> Just noticed that in Igor's response to an earlier query of mine on a
> separate issue, he took code I had shown effectively as ...
>
> [code]
> location /set/subset/ {
> abc;
> }
> location /set/ {
> xyz;
> }
> [/code]
>
> ... and wrote it like this in his response ...
> [code]
> location /set/ {
> location /set/subset/ {
> abc;
> }
> xyz;
> }
> [/code]
>
> I had put the first location block on top so that it would be processed
> since both would match but now wondering if the nested version is more
> efficient.
>
> I had been under the impression that nested locations were to be avoided
> but seeing Igor writting the code in that manner got me wondering.
>
> Is it better to have them all independent as I had originally shown were
> Nginx would match against the two in some cases and then choose the
> closest match out of the two, or the second, nested version where it
> will always match the broader location and then sometimes also match the
> tighter location inside?
If you use only locations without regexes, then you may not use nested
locations. nginx uses some kind of binary tree to match locations, so
location /set/subset/ { }
location /set/ { }
are slightly faster than nested locations. BTW you may write
location /set/ { }
location /set/subset/ { }
or
location /set/subset/ { }
location /set/ { }
- there is no difference for nginx: it finds the longest match using
the tree. The nested locations are better if you had to use regex
locations. Then I usually isolate regex location inside usual location:
location /dir/ {
location ~ ^/dir/(.+)$ {
...
}
}
> Also, how many layers deep can this go if so?
No limit, except memory, etc.
--
Igor Sysoev
http://sysoev.ru/en/
More information about the nginx
mailing list