Proxy pass location inheritance

Maxim Dounin mdounin at mdounin.ru
Fri Feb 14 12:19:50 UTC 2014


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/



More information about the nginx mailing list