nginx 文件路徑的定義

下面介紹一下文件路徑的定義配置項。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;}

相關文章
相關標籤/搜索