Nginx中try_files的理解和使用

一.配置说明

官方文档:try_files配置说明

1.try_files的语法规则:

  • 格式1:try_files file … uri;
  • 格式2:try_files file … =code;

可应用的上下文:server,location段

2.try_files的语法解释

Checks the existence of files in the specified order and uses the first found file for request processing; the processing is performed in the current context. The path to a file is constructed from the fileparameter according to the root and alias directives. It is possible to check directory’s existence by specifying a slash at the end of a name, e.g. “$uri/”. If none of the files were found, an internal redirect to the uri specified in the last parameter is made.

上面这段话的几个要点:

  1. try_files的作用:按指定的file顺序查找存在的文件,并使用第一个找到的文件进行请求处理
  2. 查找路径(uri)是按照给定的root或alias为根路径来查找的
  3. 如果给出的file都没有匹配到,则重新请求最后一个参数给定的uri,就是新的location匹配
  4. 如果是格式2,如果最后一个参数是 = 404 ,若给出的file都没有匹配到,则最后返回404的响应码

二.示例

配置示例:

1
2
3
4
location ^~ /order {
alias /workspace/static/test/;
try_files $uri $uri/ /others/index.html;
}

比如我们的server_name是test.liaosi.site,则访问 http://test.liaosi.site/order/123,会进行如下3步查找过程:

  1. 查找文件:/workspace/static/test/123
  2. 查找文件夹/workspace/static/test/123/下的index.html文件。
  3. 改为请求这个地址:http://test.liaosi.site/others/index.html

注意事项:

  1. 上面的$uri代表的是/workspace/static/test/这个路径。
  2. 上面的例子中如果没try_files的配置中没有加 $uri/,则不会去匹配目录下的索引页,即不会去访问 http://test.liaosi.site/order/123/index.html

其它用法

1
2
3
4
5
6
7
loaction / {
try_files $uri @abc
}

loaction @abc{
proxy_pass http://127.0.0.1:88
}

以上中若未找到给定顺序的文件,则将会交给location @abcl处理(相当于匹配到了@abc的路径)。

------ 本文完 ------