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地址。