Nginx中常常須要作各類配置,總結以下:nginx
一、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。spa
若是nginx中有多個server塊,那麼請求匹配server_name的順序以下:code
首先匹配準確的server_name,如:server_name test.com www.test.com;server
而後匹配以*通配符開始的server_name,如:server_name *.test.com;blog
而後匹配以*通配符結束的server_name,如:server_name www.test.*;域名
最後匹配正則表達式形式的server_name,如:server_name ~^(?<www>.+)\.test\.com$;it
以上只有有一項匹配到之後就會中止搜索。io
二、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匹配;
最後「/」通用匹配
三、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地址。