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 指令所指定的位置。