Nginx try_files

Nginx try_files

try_files 是 nginx 中 http_core 核心模块所带的指令,主要是能替代一些 rewrite 的指令,提高解析效率。

Nginx try_files 的作用是按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。

需要注意的是,只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部 URI 的指向。最后一个参数是回退 URI 且必须存在,否则会出现内部 500 错误。命名的 location 也可以使用在最后一个参数中。与 rewrite 指令不同,如果回退 URI 不是命名的 location 那么 $args 不会自动保留,如果你想保留 $args,则必须明确声明。

Nginx try_files配置

语法

try_files file ... uri try_files file ... = code

作用域

server location

实例

try_files $uri $uri/ /index.php?q=$uri&$args;

说明

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

Nginx try_files实例

实例一

server { listen 8000; server_name 192.168.119.100; root html; index index.html index.php; location /abc { try_files /4.html /5.html @qwe; } location @qwe { rewrite ^/(.*)$ http://www.haicoder.net; }

检测文件 4.html 和 5.html,如果存在正常显示,不存在就去查找 @qwe 值。也就是跳转到嗨客网页面。

实例二

location /haicoder/ { try_files $uri /haicoder/default.gif; }

当访问 www.example.com/haicoder/123/321(文件不存在)时,此时看到的是 default.gif 图片,URL 地址不变。访问 www.example.com/haicoder/123.png (文件存在)时,此时看到的是 123.png 图片,URL 地址不变。

也就说说当 images 目录下文件不存在时,默认返回 default.gif。

实例三

location /haicoder/ { try_files $uri =403; }

当访问 www.example.com/haicoder/123.html(文件存在)时,此时看到的是 123.html 内容,URL 地址不变。当访问 www.example.com/haicoder/21.html(文件不存在)时,此时看到的是 403 状态,URL 地址不变。

实例四

location /haicoder/ { try_files $uri @ab; } location @ab { rewrite ^/(.*)$ https://blog.haicoder.com; }

当访问 www.example.com/haicoder/123.html(文件存在)时,此时看到的是 123.html 内容,URL 地址不变。当访问 www.example.com/haicoder/21.html(文件不存在)时,此时跳转到 haicoder.net,URL 地址改变。

总结:当文件不存在时,会去查找 @ab 值,此时在 location 中定义 @ab 值跳转。

案例

我们首先,使用 vim 修改 /etc/nginx/conf.d/default.conf 配置,具体命令如下:

vim /etc/nginx/conf.d/default.conf;

现在,我们配置 url 重写规则,具体配置如下:

server { listen 80; location /haicoder/ { try_files $uri @ab; } location @ab { rewrite ^/(.*)$ https://www.haicoder.net; }}

配置修改完成后,此时,如下图所示:

07_nginx try_files.png

修改完毕后,我们启动 nginx,具体命令如下:

nginx

现在,我们使用浏览器访问,如下页面:

http://192.168.80.128/haicoder

此时,我们会看到,自动跳转到了嗨客网页面,如下图所示:

05_nginx url rewrite.png

我们看到,此时,跳转到了嗨客网。

Nginx try_files总结

try_files 是 nginx 中 http_core 核心模块所带的指令,主要是能替代一些 rewrite 的指令,提高解析效率。

Nginx try_files 的作用是按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。