我对try_files如何在nginx上工作感到困惑,这需要在实时生产服务器上完成,所以在100%确定之前不能testing。 我正在使用header("X-Accel-Redirect: /out/" . $fname); 从nginxconfiguration文件中处理下面的文件:
location /out { root /home; internal; }
现在我已经添加了一个额外的磁盘到我的服务器来存储文件,我希望nginx先在/homefind该文件,如果没有find/home2 。 我应该如何实现这个设置,下面的代码是有效的,应该完成我所需要的:
location /out { try_files /home /home2; internal; }
另外,当使用try_files时,我们是否需要root指令?
从try_files上的nginx文档 :
语法:try_files文件… uri
按顺序检查文件的存在,并返回find的第一个文件。 尾部的斜线表示一个目录 – $ uri /。 在没有find文件的情况下,调用到最后一个参数的内部redirect。 请注意,只有最后一个参数会导致内部redirect,前者只是设置内部URI指针。 最后一个参数是回退URI,并且必须存在,否则会引发内部错误。 命名的地点可以使用。 与重写不同的是,如果回退不是命名的位置,$ args不会自动保留。 如果你需要保存参数,你必须明确地这样做。
正如文档指定的那样,您需要有一个必须存在的回退URI。 你可以在你的设置中尝试这样的事情:
location /out { try_files /home/ /home2/ /index.html; internal; }
如果使用try_files指定了正确的path,则不需要location块中的root try_files 。