nginx中經常需要做各種配置,總結如下:
1、server_name配置
nginx中的server_name指令主要用於配置基於名稱虛擬主機,同乙個nginx虛擬主機中,可以繫結多個server_name,各個網域名稱用空格隔開即可。如下:
server
如果server_name有多個,那麼通過**如$_server["server_name"]獲取的始終將是nginx server_name配置中的第乙個網域名稱,第乙個網域名稱就相當於apache虛擬主機配置中的servername,後面的網域名稱就相當於apache的serveralias。
如果nginx中有多個server塊,那麼請求匹配server_name的順序如下:
首先匹配準確的server_name,如:server_name test.com www.test.com;
然後匹配以*萬用字元開始的server_name,如:server_name *.test.com;
然後匹配以*萬用字元結束的server_name,如:server_name www.test.*;
最後匹配正規表示式形式的server_name,如:server_name ~^(?.+)\.test\.com$;
以上只有有一項匹配到以後就會停止搜尋。
2、location配置
location的語法規則如下: location [=|~|~*|^~] /uri/ .
在nginx中location分為兩類:普通location和正則location。普通 location 」是以「 = 」或「 ^~ 」為字首或者沒有任何字首的 /uri/,包括「/」;「正則 location 」是以「 ~ 」或「 ~* 」為字首的 /uri/ 。
那麼如果乙個 server 塊中編寫了多個 location 的時候,nginx對於客戶端請求匹配順序如何呢?
官網說明如下:先匹配普通location,取的最大字首匹配,再匹配正則location,如果匹配到則按照正則匹配,如果有多個正則可以匹配到,則按照第乙個匹配結果處理,如果正則匹配失敗則使用普通location的最大字首匹配。nginx也設定了幾種機制可以打斷這種順序,分別是「^~ 」、「= 」或者location精確匹配。
簡單的講順序如下:
首先普通location「=」精確匹配;
然後普通location的url精確匹配;
然後普通location」^~"配置;
然後正則匹配;
然後其他普通location匹配;
最後「/」通用匹配
3、rewirte配置
rewrite指令的最後一項引數為flag標記,flag標記有一下四種,說明一下:
1> last
標記在本條rewrite規則執行完畢後,會對其所在server標籤重新發起請求。使用last實現uri重寫後,瀏覽器位址列不變。使用alias指令必須用last標記。
2> break
標記在本條規則匹配完成後,終止匹配,不再匹配後面的規則。使用break實現uri重寫後,瀏覽器位址列不變。使用proxy_pass指令時,需要使用break標記。
3> redirect
返回302臨時重定向,瀏覽器位址會顯示跳轉後的url位址。
4> permanent
返回301永久重定向,瀏覽器位址會顯示跳轉後的url位址。
nginx中server的匹配順序
在開始處理乙個http請求時,nginx會取出header頭中的host,與nginx.conf中每個server的server name進行匹配,以此決定到底由哪乙個server塊來處理這個請求。server name與host匹配優先順序如下 1 完全匹配 2 萬用字元在前的,如 test.co...
nginx中server的匹配順序
在開始處理乙個http請求時,nginx會取出header頭中的host,與nginx.conf中每個server的server name進行匹配,以此決定到底由哪乙個server塊來處理這個請求。server name與host匹配優先順序如下 1 完全匹配 2 萬用字元在前的,如 test.co...
nginx的location匹配順序
總原則 先字首字串,再正規表示式。不管配置檔案中的location順序怎麼寫,在匹配時,都會先 將所有字首字串拎出來,放在第一位 然後再去找所有正規表示式,作為第二位。1 首先匹配字首字串。字首字串有以下幾種形式 舉例 a location data b location data c locati...