Nginx中經常需要做各種配置,總結如下:
1、server_name配置
nginx中的server_name指令主要用於配置基於名稱虛擬主機,同一個Nginx虛擬主機中,可以繫結多個server_name,各個域名用空格隔開即可。如下:
server { listen 80; server_name test.com www.test.com; 。。。 。。。 }
如果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 ~^(?<www>.+)\.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地址。