try_files 实现多级目录静态资源查找,Nginx 按参数顺序拼接 root 路径检查文件存在性,命中即返回;如 root /var/www; try_files /cache$uri /release$uri /legacy$uri =404,依次检查 /var/www/cache/xxx 等路径。

用 try_files 实现多级目录依次查找静态资源,核心是把不同路径层级写成按优先级排列的参数序列,Nginx 会从左到右逐个拼接 root 路径后检查文件是否存在,命中即停、不继续往后查。
明确 root 是基础,所有 try_files 路径都相对它
root 指令定义了静态资源的根目录,try_files 中每个非末尾参数都会自动拼接到这个根路径下。比如:
root /var/www;try_files /a/$uri /b/$uri /c/$uri =404;
实际检查顺序是:/var/www/a/xxx → /var/www/b/xxx → /var/www/c/xxx,全不存在才返回 404。
常见多级查找结构示例
适用于资源分散在多个子目录(如版本号、环境标识、CDN 缓存层)的场景:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
按版本分层:请求
/js/app.js,先查v2/js/app.js,再查v1/js/app.js,最后兜底common/js/app.js -
按环境分层:先查
prod/$uri,再查staging/$uri,最后查shared/$uri -
缓存优先策略:先查
/cache$uri(本地磁盘缓存),再查$uri(原始路径),失败则=404或跳转@backend
配置要点与避坑提醒
-
$uri不带开头斜杠,所以/a/$uri拼出来是/var/www/a/xxx;不要写成/a/$uri和/$uri混用,后者会多拼一个/导致路径错误 - 最后一个参数不能是普通路径,必须是内部重定向(如
@fallback)、状态码(如=404)或以/开头的 URI(如/404.html) - 如果某一级是目录(如
$uri/),需配合index指令才能触发自动索引页查找 - 调试时可用
log_format打印$request_filename,确认 Nginx 实际检查的是哪个物理路径
一个可直接用的生产级配置片段
假设资源按 cache → release → legacy 三级存放:
location / {
root /var/www/static;
try_files /cache$uri /release$uri /legacy$uri =404;
}
请求 /css/main.css 时,Nginx 依次检查:
/var/www/static/cache/css/main.css/var/www/static/release/css/main.css/var/www/static/legacy/css/main.css
任一存在即返回,全部缺失就返回 404。

















