nginx中的index配置


index指令的作用
在前后端分離的基礎上,通過Nginx配置,指定網站初始頁。

如果包括多個文件,Nginx會根據文件的枚舉順序來檢查,直到查找的文件存在;
文件可以是相對路徑也可以是絕對路徑,絕對路徑需要放在最后;
文件可以使用變量$來命名;
index index.$geo.html index.0.html /index.html;

該指令擁有默認值,index index.html ,即,如果沒有給出index,默認初始頁為index.html
核心內容(中文文檔沒有或一筆帶過,而官方文檔作詳細解釋):
Nginx給了三種方式來選擇初始頁,三種方式按照順序來執行:

ngx_http_random_index_module 模塊,從給定的目錄中隨機選擇一個文件作為初始頁,而且這個動作發生在 ngx_http_index_module 之前,注意:這個模塊默認情況下沒有被安裝,需要在安裝時提供配置參數 --with-http_random_index_module;
ngx_http_index_module 模塊,根據index指令規則來選擇初始頁;
ngx_http_autoindex_module 模塊,可以使用指定方式,根據給定目錄中的文件列表自動生成初始頁,這個動作發生在 ngx_http_index_module之后,即只有通過index指令無法確認初始頁,此時啟用后的自動生成模塊才會被使用。
切記,index指令並不是查到文件之后,就直接拿來用了。它的實際工作方式是:

如果文件存在,則使用文件作為路徑,發起內部重定向。直觀上看上去就像再一次從客戶端發起請求,Nginx再一次搜索location一樣。

既然是內部重定向,域名+端口不發生變化,所以只會在同一個server下搜索。

同樣,如果內部重定向發生在proxy_pass反向代理后,那么重定向只會發生在代理配置中的同一個server。

實例
server {
listen 80;
server_name example.org www.example.org;

location / {
root /data/www;
index index.html index.php;
}

location ~ \.php$ {
root /data/www/test;
}
}

上面的例子中,如果你使用example.org或www.example.org直接發起請求,那么首先會訪問到“/”的location,結合root與index指令,會先判斷/data/www/index.html是否存在,如果不,則接着查看
/data/www/index.php ,如果存在,則使用/index.php發起內部重定向,就像從客戶端再一次發起請求一樣,Nginx會再一次搜索location,毫無疑問匹配到第二個~ \.php$,從而訪問到/data/www/test/index.php。


 

location / {
            try_files $uri $uri/ /index.php;
}

 

當用戶請求 http://localhost/example 時,這里的 $uri 就是 /example。 
try_files 會到硬盤里嘗試找這個文件。如果存在名為 /$root/example(其中 $root 是項目代碼安裝目錄)的文件,就直接把這個文件的內容發送給用戶。 
顯然,目錄中沒有叫 example 的文件。然后就看 $uri/,增加了一個 /,也就是看有沒有名為 /$root/example/ 的目錄。 
又找不到,就會 fall back 到 try_files 的最后一個選項 /index.php,發起一個內部 “子請求”,也就是相當於 nginx 發起一個 HTTP 請求到 http://localhost/index.php。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM