根目錄和索引文件
root 指令指定將用于搜索文件的根目錄。 為了獲取所請求文件的路徑,NGINX 將請求 URI 附加到 root 指令指定的路徑。該指令可以放在 http {} , server {} 或 location {} 上下文中的任何級別。在下面的示例中,為虛擬服務器定義了 root 指令。 它適用于未包含根指令的所有 location {} 塊,以顯式重新定義根:
server { root /www/data; location / { } location /images/ { } location ~ /.(mp3|mp4) { root /www/media; }}
在這里,NGINX 針對 /images/ 開頭的 URI 將在文件系統的 /www/ data/images/ 目錄中搜索相應文件。 如果 URI 以 .mp3 或 .mp4 擴展名結尾,則 NGINX 會在 /www/media/ 目錄中搜索該文件,因為它是在匹配的位置塊中定義的。
如果請求以 / 結尾,則 NGINX 將其視為對目錄的請求,并嘗試在目錄中查找索引文件。 index 指令定義索引文件的名稱(默認值為 index.html)。要繼續該示例,如果請求 URI 是 /images/some/path/ ,則 NGINX 會返回文件 /www/data/images/some/path/index.html (如果存在)。如果沒有,NGINX 默認返回 HTTP 404 錯誤(未找到)。要配置 NGINX 以返回自動生成的目錄列表,請在 autoindex 指令中包含 on 參數:
location /images/ { autoindex on;}
你可以在 index 指令中列出多個文件名。 NGINX按指定的順序搜索文件并返回它找到的第一個文件。
location / { index index.$geo.html index.htm index.html;}
這里使用的 $geo 變量是通過 geo 指令設置的自定義變量。變量的值取決于客戶端的 IP 地址。
要返回索引文件,NGINX 會檢查它是否存在,然后對通過將索引文件的名稱附加到基礎 URI 上獲得的新 URI 進行內部重定向。內部重定向導致對位置的新搜索,并且可能最終位于另一個位置,如以下示例所示:
location / { root /data; index index.html index.php;}location ~ /.php { fastcgi_pass localhost:8000; #...}
這里,如果請求中的 URI 是 /path/ ,并且 /data/path/index.html 不存在但 /data/path/index.php 存在,則內部重定向到 /path/index.php 將映射到第二個位置。結果,請求被代理。
嘗試幾種選擇
try_files 指令可用于檢查指定的文件或目錄是否存在; NGINX 會進行內部重定向,如果沒有,則返回指定的狀態代碼。例如,要檢查對應于請求 URI 的文件是否存在,請使用 try_files 指令和 $uri 變量,如下所示:
server { root /www/data; location /images/ { try_files $uri /images/default.gif; }}
該文件以 URI 的形式指定,使用在當前位置或虛擬服務器的上下文中設置的根或別名指令進行處理。在這種情況下,如果對應于原始 URI 的文件不存在,NGINX 會將內部重定向到最后一個參數指定的 URI,并返回 /www/data/images/default.gif 。
新聞熱點
疑難解答