Nginx企业级负载均衡:技术详解系列(16)—— Nginx的try_files指令,你知道这个指令是干什么的吗?

发布于:2024-06-03 ⋅ 阅读:(157) ⋅ 点赞:(0)

在这里插入图片描述

你好,我是赵兴晨,97年文科程序员。

今天咱们来聊一聊Nginx的try_files指令,你知道这个指令是干什么的吗?

如果你对Web服务器配置有所了解,那么你可能会对try_files指令感到好奇。这个指令实际上是Nginx配置中的一项强大功能,它能够按顺序检测文件或目录是否存在。当文件或目录不存在时,Nginx会执行内部重定向到一个指定的回退URI。

检测文件是否存在

在Nginx的配置文件中,try_files指令允许我们定义一个文件列表,Nginx会按照这个列表的顺序去查找文件。例如,它可能首先查找原始的URI,然后是该RUI的.html版本,接着是URI对应的目录下的index.html文件。如果所有这些尝试都失败了,Nginx将重定向到我们的回退URI。

重要的是要注意,只有列表中的最后一个参数能够触发内部重定向,而其他参数仅用于设置内部URI的指向。此外,最后一个参数指定的回退URI必须存在,否则Nginx将返回一个内部500的错误。

通过这种方式,try_files指令不仅提高了Web服务器的领会行,还增强了用户体验,因为它允许我们优雅地处理不存在的文件请求。

语法格式:
try_files指令的基本语法如下:

try_files file ... uri;
try_files file ... =code;
  • file:需要检查的文件或目录路径。
  • uri:如果所有文件都不存在,将重定向到这个RUI。
  • code:如果指定文件不存在,返回自定义的状态码。

应用场景示例:
假设我们希望当用户访问不存在的页面时,自动跳转到 default.html 页面。我们可以这样配置:

location / {
  root /data/nginx/html/pc;
  index index.html;
  try_files $uri $uri.html $uri/index.html /about/default.html;
}

在上面👆例子中,如果用户请求的URI对应的文件不存在,Nginx将尝试查找$uri.html 或 $uri/index.html。如果这些文件也不存在,Nginx将重定向到 /about/default/html。

自定义状态码:
我们还可以通过设置 try_files的最后一个参数为等于某个状态码,来自定义返回的状态码。例如:

try_files $uri $uri/index.html $uri.html =489;

这样配置后,当用户访问不存在的URI时,Nginx将返回状态码489。

测试与验证
为了验证配置是否生效,我们可以执行以下操作:
1、向 /data/nginx/html/pc/about/default.html 文件中添加一些内容。

mkdir -p /data/nginx/html/pc/about
echo "this is default! " > /data/nginx/html/pc/about/default.html

2、重启Nginx服务。

systemctl restart nginx

3、访问一个不存在的URI,如 http://chensir.ink/about/xx.html,观察是否显示 default.html 的内容。
在这里插入图片描述

在这里插入图片描述

补充知识点:
使用 curl 命令时,可用过 -I 选项来发送HRAD请求,这样 curl 会只读文档的头部信息,而不是整个文档。这样可以帮助您查看返回的HTTP状态码。

4、注释掉 default.html的重定向,启用自定义状态码489的配置,再次访问不存在的URI,观察返回的状态码是否为489。

server {
  listen 80;
  location / {
    root /data/nginx/html/pc;
    index index.html;
    try_files $uri $uri.html $uri/index.html $uri.html =489;
    }
}

在这里插入图片描述

状态码是489,跟咱们预想的一样。

通过这些步骤,我们可以确保Nginx的try_files指令按照预期工作,为用户提供更加友好和灵活的访问体验。

OK,今天的分享就到这啦,感谢您的阅读。我们下期再见!


网站公告

今日签到

点亮在社区的每一天
去签到