try_files and a nested location regexp

Francis Daly francis at
Thu Oct 16 13:18:32 UTC 2014

On Thu, Oct 16, 2014 at 08:42:26AM -0400, igorb wrote:

Hi there,

> Thanks again for detailed explanation. Now I almost grasped how try_files
> works. "Almost" because I still do not see why the following does not work:

There is a defect which is involved here, and probably interferes:

Anything involving try_files and alias may not do what you expect.

If you can specify what exactly you want, it may be possible to find a
configuration which does that using the current implementation of the
defect. Or it may not be.

You will probably be much happier investigating if you enable the
debug log.

> location /x/ {
> alias /test/;
> location ~ ^/x/(test.*) {
> try_files $1 =404;
> }
> }

> For localhost/x/test.html $1 will be test.html. I suppose $document_root
> should be /test/ as it was set with the alias in the outer location so
> try_files should try to check for existing /test/test.html . However, nginx
> still reports 404. Why it is so?

Can you tell whether the 404 is from the uri argument of try_files,
or the serve-from-filesystem handler?

Look in the debug log and you will see what happens.

Or: what do you see if you change try_files to end in =405?

The rest is "the details of what else try_files and alias do".

(try_files does see /test/test.html, but the serve-from-filesystem
handler does not try to serve that file.)

Francis Daly        francis at

More information about the nginx mailing list