下面介紹一下文件路徑的定義配置項。php
(1)以root方式設置資源路徑html
語法:root path;nginx
默認:root html;web
配置塊:http、server、location、if正則表達式
例如,定義資源文件相對於HTTP請求的根目錄。
location /download/ {
root /opt/web/html/;
}服務器
在上面的配置中,若是有一個請求的URI是/download/index/test.html,那麼Web服務器將會返回服務器上/opt/web/html/download/index/test.html文件的內容。fetch
(2)以alias方式設置資源路徑網站
語法:alias path;spa
配置塊:location.net
alias也是用來設置文件資源路徑的,它與root的不一樣點主要在於如何解讀緊跟location後面的uri參數,這將會導致alias與root以不一樣的方式將用戶請求映射到真正的磁盤文件上。例如,若是有一個請求的URI是/conf/nginx.conf,而用戶實際想訪問的文件在/usr/local/nginx/conf/nginx.conf,那麼想要使用alias來進行設置的話,能夠採用以下方式:
location /conf {
alias /usr/local/nginx/conf/;
}
若是用root設置,那麼語句以下所示:
location /conf {
root /usr/local/nginx/;
}
使用alias時,在URI向實際文件路徑的映射過程當中,已經把location後配置的/conf這部分字符串丟棄掉,所以,/conf/nginx.conf請求將根據alias path映射爲path/nginx.conf。root則否則,它會根據完整的URI請求來映射,所以,/conf/nginx.conf請求會根據root path映射爲path/conf/nginx.conf。這也是root能夠放置到http、server、location或if塊中,而alias只能放置到location塊中的緣由。
alias後面還能夠添加正則表達式,例如:
location ~ ^/test/(\w+)\.(\w+)$ {
alias /usr/local/nginx/$2/$1.$2;
}
這樣,請求在訪問/test/nginx.conf時,Nginx會返回/usr/local/nginx/conf/nginx.conf文件中的內容。
(3)訪問首頁
語法:index file ...;
默認:index index.html;
配置塊:http、server、location
有時,訪問站點時的URI是/,這時通常是返回網站的首頁,而這與root和alias都不一樣。這裏用ngx_http_index_module模塊提供的index配置實現。index後能夠跟多個文件參數,Nginx將會按照順序來訪問這些文件,例如:
location / {
root path;
index /index.html /html/index.php /index.php;
}
接收到請求後,Nginx首先會嘗試訪問path/index.php文件,若是能夠訪問,就直接返回文件內容結束請求,不然再試圖返回path/html/index.php文件的內容,依此類推。
(4)根據HTTP返回碼重定向頁面
語法:error_page code [ code... ] [ = | =answer-code ] uri | @named_location
配置塊:http、server、location、if
當對於某個請求返回錯誤碼時,若是匹配上了error_page中設置的code,則重定向到新的URI中。例如:
error_page 404 /404.html;
error_page 502 503 504 /50x.html;
error_page 403 http://example.com/forbidden.html;
error_page 404 = @fetch ;
注意,雖然重定向了URI,但返回的HTTP錯誤碼仍是與原來的相同。用戶能夠經過「=」來更改返回的錯誤碼,例如:
error_page 404 =200 /empty.gif;
error_page 404 =403 /forbidden.gif;
也能夠不指定確切的返回錯誤碼,而是由重定向後實際處理的真實結果來決定,這時,只要把「=」後面的錯誤碼去掉便可,例如:
error_page 404 = /empty.gif;
若是不想修改URI,只是想讓這樣的請求重定向到另外一個location中進行處理,那麼能夠這樣設置:
location / (
error_page 404 @fallback ;
)
location @fallback (
proxy_pass http://backend;
)
這樣,返回404的請求會被反向代理到http://backend上游服務器中處理。
(5)是否容許遞歸使用error_page
語法:recursive_error_pages [on | off];
默認:recursive_error_pages off;
配置塊:http、server、location
肯定是否容許遞歸地定義error_page。
(6)try_files
語法:try_files path1 [path2] uri;
配置塊:server、location
try_files後要跟若干路徑,如path1 path2...,並且最後必需要有uri參數,意義以下:嘗試按照順序訪問每個path,若是能夠有效地讀取,就直接向用戶返回這個path對應的文件結束請求,不然繼續向下訪問。若是全部的path都找不到有效的文件,就重定向到最後的參數uri上。所以,最後這個參數uri必須存在,並且它應該是能夠有效重定向的。例如:
try_files /system/maintenance.html $uri $uri/index.html $uri.html @other ;
location @other {
proxy_pass http://backend;
}
上面這段代碼表示若是前面的路徑,如/system/maintenance.html等,都找不到,就會反向代理到http://backend服務上。還能夠用指定錯誤碼的方式與error_page配合使用,例如:location / { try_files $uri $uri/ /error.php?c=404 =404;}