当前位置: 代码网 > 移动>阿里 > Nginx try_files 指令常见用法示例

Nginx try_files 指令常见用法示例

2026年05月11日 阿里 我要评论
try_files 是 nginx 中一个非常实用的指令,用于按顺序检查文件是否存在,并返回第一个找到的文件。如果所有文件都不存在,则执行最后一个参数指定的回退操作(通常是返回错误码或转发请求)。基本

try_files 是 nginx 中一个非常实用的指令,用于按顺序检查文件是否存在,并返回第一个找到的文件。如果所有文件都不存在,则执行最后一个参数指定的回退操作(通常是返回错误码或转发请求)。

基本语法

try_files file1 file2 ... =code|uri|@named_location;

常见用法示例

1.spa(单页应用)常用配置

location / {
    try_files $uri $uri/ /index.html;
}
  • 先尝试访问请求的 uri 对应的文件
  • 再尝试访问 uri 对应的目录
  • 都不存在则返回 /index.html

2.带回退代理

location / {
    try_files $uri $uri/ @backend;
}
location @backend {
    proxy_pass http://backend_server;
}
  • 静态文件不存在时转发到后端应用

3.检查多个路径

location /images/ {
    try_files /cache$uri $uri =404;
}
  • 先检查缓存目录
  • 再检查原始路径
  • 都不存在返回 404

参数详解

$uri

当前请求的 uri(不包含查询参数)

$uri/

表示目录,会尝试寻找目录下的索引文件(需配合 index 指令)

回退类型

静态文件/路径

try_files $uri /default.html;

命名 location(@ 开头)

try_files $uri @fallback;
location @fallback {
    # 处理逻辑
}

错误码

try_files $uri =404;
try_files $uri =403;

代理转发

try_files $uri @proxy;
location @proxy {
    proxy_pass http://backend;
}

实际应用场景

场景1:php 应用

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php-fpm.sock;
}
  • 防止直接访问不存在的 php 文件

场景2:多级缓存

location /assets/ {
    try_files /cdn-cache/$uri 
              /local-cache/$uri 
              $uri 
              @generate_asset;
}

场景3:维护模式

location / {
    try_files /maintenance.html $uri $uri/ @app;
}
  • 优先显示维护页面

注意事项

  1. 顺序重要:nginx 按顺序检查,找到即停
  2. 性能影响:每个文件检查都会产生磁盘 i/o
  3. 相对路径:相对于 rootalias 指令
  4. 最后参数:必须指定回退操作
  5. 内部重定向try_files 会内部重定向,可能改变 $uri

与if的对比

不推荐(低效):

if (-f $request_filename) {
    # 处理静态文件
}

推荐(高效):

try_files $uri @dynamic;

调试技巧

添加调试日志:

location / {
    try_files $uri $uri/ @backend;
    error_log /var/log/nginx/try_files.log debug;
}

try_files 的核心思想是 “按优先级尝试,优雅降级”,合理使用可以大大简化配置逻辑并提高性能。

到此这篇关于nginx try_files 指令常见用法示例的文章就介绍到这了,更多相关nginx try_files 指令内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com