我很困惑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
语法:try_files 文件...uri
按顺序检查文件是否存在,并返回找到的第一个文件。尾部斜杠表示目录 - $uri /。如果未找到任何文件,则调用内部重定向到最后一个参数。请注意,只有最后一个参数会导致内部重定向,前一个参数只会设置内部 URI 指针。最后一个参数是后备 URI,必须存在,否则将引发内部错误。可以使用命名位置。与重写不同,如果 fallback 不是命名位置,则不会自动保留 $args。如果需要保留 args,则必须明确执行。
根据文档说明,您需要有一个必须存在的后备 URI。您可以在设置中尝试以下操作:
location /out {
try_files /home/ /home2/ /index.html;
internal;
}
如果您已经使用 指定了正确的路径,则不需要-blockroot
中的 -directive 。location
try_files