Close, it's more akin to:
location / {
location ~ regex1 {
# regex inside /
}
}
location ~ regex2 {
location ~ regex3 {
# regex inside regex2
}
}
And the question is: where will a request matching both regex1 and regex3 be
handled?
Regex 1 & 3 look for the same file types and are identical, but contain
different configurations based on the parent location. Currently, regex1 is
catching all matches, irrespective of the parent location.
If I understand correctly, I could solve my problem by moving the regex2
location block before the / location block, and then rewriting regex3 so that
it included the elements of both the current regex2 and regex3. That way,
regex3 would ONLY hit for items that matched both the current regex2 and
regex3, and it would appear before regex1 in the order of execution.
Is this correct, or will NGINX always give priority to the / location?
________________________________________
From: [email protected] [[email protected]] on behalf of Maxim
Dounin [[email protected]]
Sent: Friday, February 14, 2014 4:19 AM
To: [email protected]
Subject: Re: Proxy pass location inheritance
Hello!
On Thu, Feb 13, 2014 at 06:43:08PM +0000, Brian Hill wrote:
> Hello, we are using NGINX to serve a combination of local and
> proxied content coming from both an Apache server (mostly PHP
> content) and IIS 7.5 (a handful of third party .Net
> applications). The proxy is working properly for the pages
> themselves, but we wanted set up a separate location block for
> the "static" files (js, images, etc) to use different caching
> rules. In theory, each of the static file location blocks should
> be serving from the location specified in its parent location
> block, but instead ALL image requests are being routed to the
> root block.
[...]
> Three of the four conditions are working properly.
> A request for www.site.edu/index.php gets sent to 10.64.1.10:80/index.php
> A request for www.site.edu/image1.gif gets sent to 10.64.1.10:80/default.gif
> A request for www.site.edu/app1/default.aspx gets sent to
> 10.64.1.20:80/app1/default.aspx
>
> But the last condition is not working properly.
> A request for www.site.edu/app1/image2.gif should be sent to
> 10.64.1.20:80/app1/image2.gif.
> Instead, it's being routed to 10.64.1.10:80/app1/image2.gif, which is an
> invalid location.
>
> So it appears that the first server location block is catching
> ALL of the requests for the static files. Anyone have any idea
> what I'm doing wrong?
Simplified:
location / {
location ~ regex1 {
# regex inside /
}
}
location ~ regex2 {
# regex
}
The question is: where a request matching regex1 and regex2 will
be handled?
The answer is - in "location ~ regex1". Locations given by
regular expressions within a matching prefix location are tested
before other locations given by regular expressions.
--
Maxim Dounin
http://nginx.org/
_______________________________________________
nginx mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx
_______________________________________________
nginx mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx