Nested location block for merging config returns 404?

WheresWardy nginx-forum at nginx.us
Tue Jan 21 13:29:18 UTC 2014


I want a location to proxy to another service, and need to add an extra
header for certain file types, but when trying to merge the configuration
with a nested location instead of duplicating nginx instead returns a 404.

For example, this configuration works:

location ~ /(dir1/)?dir2/ {
  add_header X-My-Header value1;
  proxy_pass http://myproxy;
}

location ~ /(dir1/)?dir2/.*\.(txt|css) {
  add_header X-My-Static value2;
  add_header X-My-Header value1;
  proxy_pass http://myproxy;
}

Passing valid URLs to the above config works perfectly, and I'll get the
extra header set if it's a txt or css file (examples for the sake of
argument). However, what I want to accomplish is to merge these two blocks
into one nested location block to save on the duplication, however when I do
that I just get a 404 returned for the previously workings URLs:

location ~ /(dir1/)?dir2/ {
  location \.(txt|css) {
    add_header X-My-Static value2;
  }
  add_header X-My-Header value1;
  proxy_pass http://myproxy;
}

Can location blocks actually be nested in this way? I'm wondering if the 404
is because it's only parsing the specific nested block, and doesn't fallback
onto the remaining config underneath (and therefore never gets sent to the
proxy, and it's nginx returning a 404 which would be expected for that URL).

Posted at Nginx Forum: http://forum.nginx.org/read.php?2,246655,246655#msg-246655



More information about the nginx mailing list