Try_files behaviour details

Hey,

I have a question about how try_files works in some cases. The standard
case seems to be

server {
server_name foo;

location / {
try_files $uri index.html;
}
}

Here nginx tries $uri and then finally index.html if no other location
block matches. Now say that there are no other location blocks and nginx
enters location / again, the try_files directive is then skipped as it’s
already been used once, right?

Second example:

server {
server_name bar;

try_files $uri index.php;
}

Here try_files is used in the server block. The wiki says try_files
can’t be used here but Nginx will happily accept it, from my testing it
seems to behave identically to the first example except it’s always
executed. Is this a correct assumption?

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

Hello!

On Mon, Aug 16, 2010 at 04:07:41PM -0400, Ensiferous wrote:

}
}

Here nginx tries $uri and then finally index.html if no other location
block matches. Now say that there are no other location blocks and nginx
enters location / again, the try_files directive is then skipped as it’s
already been used once, right?

No. In the example above nginx will enter location /, test $uri
existance, if not found - it will issue internal redirect to
fallback agument, “index.html” in this case.

As “index.html” (invalid uri, may only happen due to internal
redirects like the above) isn’t matched by location / it will be
processed in default location context. With default root
("/usr/local/nginx/html") it will try to access
“/usr/local/nginx/htmlindex.html” file.

seems to behave identically to the first example except it’s always
executed. Is this a correct assumption?

In this example you define try_files in default location context,
the one which match both valid uris and “index.php”.

Maxim D.

mike Wrote:

i have try_files outside of location blocks
plenty.

the wiki probably just needs updating

This was my purpose for asking, I know try_files works just fine outside
of location blocks, but I wanted to make sure I fully understood how
try_files would work before changing the wiki.

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

i have try_files outside of location blocks plenty.

the wiki probably just needs updating

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs