index指令的做用
在先後端分離的基礎上,經過Nginx配置,指定網站初始頁。
若是包括多個文件,Nginx會根據文件的枚舉順序來檢查,直到查找的文件存在;
文件能夠是相對路徑也能夠是絕對路徑,絕對路徑須要放在最後;
文件可使用變量$來命名;
index index.$geo.html index.0.html /index.html;
該指令擁有默認值,index index.html ,即,若是沒有給出index,默認初始頁爲index.html
核心內容(中文文檔沒有或一筆帶過,而官方文檔做詳細解釋):
Nginx給了三種方式來選擇初始頁,三種方式按照順序來執行:php
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指令並非查到文件以後,就直接拿來用了。它的實際工做方式是:html
若是文件存在,則使用文件做爲路徑,發起內部重定向。直觀上看上去就像再一次從客戶端發起請求,Nginx再一次搜索location同樣。nginx
既然是內部重定向,域名+端口不發生變化,因此只會在同一個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。dom
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
。 網站