【Nginx】try_files指令详解

try_files 是 Nginx 中的一个非常有用的指令,用于处理静态文件请求。它尝试按给定的顺序查找文件或目录,如果找不到,则继续尝试下一个路径,直到找到为止。如果所有的尝试都失败了,Nginx 会返回一个错误页面或执行最后一个指定的操作(通常是重定向或返回一个默认页面)。

1、try_files使用示例:

try_files  $uri $uri/ /TEST/index.html;

这里的 $uri 是客户端请求的原始 URI。

让我们逐步解释这条指令:

1)$uri: Nginx 会首先尝试直接从请求的 URI 中查找文件。例如,如果用户请求 /about, Nginx 会尝试查找 /about 文件。
2)$uri/: 如果第一步没有找到文件,Nginx 会尝试将请求的 URI 视为目录,并在后面添加斜杠 /。例如,如果用户请求 /about, Nginx 会尝试查找 /about/ 目录。
3)/TEST/index.html: 如果前两步都没有成功找到文件或目录,Nginx 会尝试返回 /TEST/index.html 文件。

则:

  • 如果用户请求的是一个存在的文件(如 /about),Nginx 将直接返回该文件。
  • 如果用户请求的是一个目录(如 /about/),Nginx 将尝试返回该目录下的默认文件。
  • 如果上述两种情况都没有发生,Nginx 最终会尝试返回 /TEST/index.html。
  • 这样的配置非常适合单页应用(SPA)或那些希望为所有未找到的路由提供一个默认页面的应用程序。例如,如果你有一个前端应用托管在 /TEST/ 下,并且所有的页面都在 /TEST/index.html 中呈现,那么这个配置就能确保无论用户请求什么路径,都能看到应用的首页。

2、问:/VISA/index.html 是全路径么?

在 Nginx 的 try_files 指令中使用的路径 /TEST/index.html 不是一个绝对路径,而是一个相对于 Nginx 服务器根目录的相对路径。这里的 /TEST/index.html 表示的是服务器文档根目录下的一个子目录 /TEST/ 中的 index.html 文件。

解释

  • 服务器根目录 (server root directory): 这是 Nginx 配置文件中定义的 root 指令所指向的目录。例如,如果你的 Nginx 配置中有如下指令:
root /var/www/html;

那么 /var/www/html 就是服务器的根目录。

  • 相对路径 (relative path): /VISA/index.html 是相对于服务器根目录的路径。在这个例子中,Nginx 会尝试在服务器根目录下寻找 /VISA/ 目录,并从中加载 index.html 文件。

示例:

如果你的 Nginx 配置如下:

server {
    listen 80;
    server_name example.com;

    root /var/www/html;

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

假设用户访问 http://example.com/about,Nginx 会按照以下步骤处理请求:

1)尝试查找 /var/www/html/about。
2)如果步骤 1 失败,尝试查找 /var/www/html/about/。
3)如果步骤 2 失败,最后尝试查找 /var/www/html/VISA/index.html。
总结

  • 不是全路径:/VISA/index.html 不是一个操作系统级别的全路径,而是一个相对于 Nginx 服务器根目录的路径。
  • 实际位置:这个文件的实际位置取决于你的 Nginx root 指令所指定的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值