nginx 和 try_files 混淆

nginx 和 try_files 混淆

我很困惑try_files适用于 nginx,但这需要在实际生产服务器上完成,因此在 100% 确定之前无法进行测试。我使用header("X-Accel-Redirect: /out/" . $fname);它从 PHP 传递文件,它由 nginx 配置中的以下内容处理:

location /out {
            root /home;
            internal;
        }

现在我已向服务器添加了一个额外的磁盘来存储文件,我希望 nginx 首先在 处找到文件,/home如果未找到,则在 处找到/home2。我应该如何实现此设置,下面的代码是否有效,并且应该可以完成我需要的操作:

location /out {
            try_files /home /home2;
            internal;
        }

另外,使用 try_files 时我们还需要 root 指令吗?

答案1

来自nginx 关于 try_files 的文档

语法:try_files 文件...uri

按顺序检查文件是否存在,并返回找到的第一个文件。尾部斜杠表示目录 - $uri /。如果未找到任何文件,则调用内部重定向到最后一个参数。请注意,只有最后一个参数会导致内部重定向,前一个参数只会设置内部 URI 指针。最后一个参数是后备 URI,必须存在,否则将引发内部错误。可以使用命名位置。与重写不同,如果 fallback 不是命名位置,则不会自动保留 $args。如果需要保留 args,则必须明确执行。

根据文档说明,您需要有一个必须存在的后备 URI。您可以在设置中尝试以下操作:

location /out {
  try_files /home/ /home2/ /index.html;
  internal;
}

如果您已经使用 指定了正确的路径,则不需要-blockroot中的 -directive 。locationtry_files

相关内容