Linux

nginx 和 try_files 混淆

  • October 7, 2013

我對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 指令?

來自try_files 的 nginx 文件

語法:try_files 文件 … uri

按順序檢查文件是否存在,並返回找到的第一個文件。尾部斜杠表示目錄 - $uri /。如果未找到文件,則會呼叫到最後一個參數的內部重定向。請注意,只有最後一個參數會導致內部重定向,前一個參數只是設置內部 URI 指針。最後一個參數是回退 URI,必須存在,否則會引發內部錯誤。可以使用命名位置。與重寫不同,如果回退不是命名位置,則不會自動保留 $args。如果您需要保留 args,則必須明確這樣做。

正如文件所指定的,您需要有一個必須存在的備份 URI。你可以在你的設置中嘗試這樣的事情:

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

如果您使用 指定了正確的路徑,則不需要root-block 中的-directive 。location``try_files

引用自:https://serverfault.com/questions/544202