Nginx try_files 指令常见用法示例

 更新时间:2026年05月11日 09:35:36   作者:学亮编程手记  
try_files是Nginx用于按顺序检查文件是否存在并返回第一个找到的文件,本文给大家介绍Nginx try_files 指令常见用法示例,感兴趣的朋友跟随小编一起看看吧

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 指令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx代理接口访问返回404的实现示例

    Nginx代理接口访问返回404的实现示例

    因为不同业务系统间有接口调用,存在跨域问题,为了解决同源策略,需要将接口通过nginx去转发,本文主要介绍了Nginx代理接口访问返回404的实现示例,感兴趣的可以了解一下
    2024-06-06
  • prometheus监控nginx的实现

    prometheus监控nginx的实现

    这篇文章主要介绍了prometheus监控nginx的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • nginx通过https部署vue项目的完整步骤

    nginx通过https部署vue项目的完整步骤

    在实际开发中,我们会以https形式进行页面访问,下面这篇文章主要给大家介绍了关于nginx通过https部署vue项目的完整步骤,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • nginx反向代理之多端口映射的实现

    nginx反向代理之多端口映射的实现

    这篇文章主要介绍了nginx反向代理之多端口映射的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Nginx 防止被域名恶意解析的办法

    Nginx 防止被域名恶意解析的办法

    这篇文章主要介绍了Nginx 防止被域名恶意解析的方法的相关资料,希望通过本文能帮助到大家,让大家掌握理解这部分内容,需要的朋友可以参考下
    2017-10-10
  • Centos下编译安装Nginx教程详解

    Centos下编译安装Nginx教程详解

    这篇文章主要介绍了Centos下编译安装Nginx的教程详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • Nginx-rewrite模块概述

    Nginx-rewrite模块概述

    从功能上看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,这篇文章主要介绍了Nginx-rewrite模块详细介绍,需要的朋友可以参考下
    2023-06-06
  • Nginx/Openresty中启用http2支持的方法教程

    Nginx/Openresty中启用http2支持的方法教程

    Openresty/Nginx默认是不支持http2的,需要将http2模块编译进应用中。这篇文章主要给大家介绍了关于在Nginx/Openresty中启用http2支持的方法教程,文中介绍的非常详细,对大家具有一的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • nginx反向代理java项目方式

    nginx反向代理java项目方式

    文章简要介绍了如何使用Nginx作为反向代理来部署Java项目,核心在于配置proxy_pass指令
    2024-12-12
  • Nginx配置实现用IP灰度测试(不同用户ID)

    Nginx配置实现用IP灰度测试(不同用户ID)

    本文主要介绍了使用Nginx配置实现基于IP的灰度发布实验,以及如何通过不同用户ID测试灰度发布,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11

最新评论