標識符 | 描述 |
---|---|
= | 精確匹配;用於標準uri前,要求請求字符串和uri嚴格匹配。若是匹配成功,就中止匹配,當即執行該location裏面的請求。 |
~ | 正則匹配;用於正則uri前,表示uri裏面包含正則,而且區分大小寫。 |
~* | 正則匹配;用於正則uri前,表示uri裏面包含正則,不區分大小寫。 |
^~ | 非正則匹配;用於標準uri前,nginx服務器匹配到前綴最多的uri後就結束,該模式匹配成功後,不會使用正則匹配。 |
無 | 普通匹配(最長字符匹配);與location順序無關,是按照匹配的長短來取匹配結果。若徹底匹配,就中止匹配。 |
備註:css
一、若是uri裏面包含正則表達式,就必須使用~或~*標識符;nginx
二、針對~和~*匹配標識符,能夠在前面加上!來取反,以下:正則表達式
!~表示正則不匹配,區分大小寫。服務器
!~*表示正則不匹配,不區分大小寫。code
location = /login { # 精確匹配 /login ,匹配成功後,當即結束 }
location ~ /images/ { #正則匹配,區分大小寫,匹配成功後,當即結束 }
location ~* /images/ { #正則匹配,不區分大小寫,匹配成功後,當即結束 }
location ^~ /images/ { # 匹配任何以 /images/ 開頭的地址,匹配符合之後,中止往下搜索正則,採用這一條。 }
location /blog/ { # 與location順序無關 # 若徹底匹配成功,就不在繼續匹配,不然還會進行正則匹配 }
在沒有標識符的請求下,匹配規則以下:server
一、nginx服務器首先在server塊的多個location塊中搜索是否有標準的uri和請求字符串匹配。若是有多個標準uri能夠匹配,就匹配其中匹配度最高的一個location。blog
二、而後,nginx在使用location塊中,正則uri和請求字符串,進行匹配。若是正則匹配成功,則結束匹配,並使用這個location處理請求;若是正則匹配失敗,則使用標準uri中,匹配度最高的location。字符串
備註:io
一、若是有精確匹配,會先進行精確匹配,匹配成功,馬上返回結果。table
二、普通匹配與順序無關,由於按照匹配的長短來取匹配結果。
三、正則匹配與順序有關,由於是從上往下匹配。(首先匹配,就結束解析過程)
四、在location中,有一種統配的location,全部的請求,均可以匹配,以下:
location / { # 由於全部的地址都以 / 開頭,因此這條規則將匹配到全部請求 # 可是正則和最長字符串會優先匹配 }
結合標識符,匹配順序以下:
(location =) > (location 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分起始路徑) > (location /)
即:
(精確匹配)> (最長字符串匹配,但徹底匹配) >(非正則匹配)>(正則匹配)>(最長字符串匹配,不徹底匹配)>(location通配)
location = / { //精確匹配/ ,主機名後面不能帶任何字符串 echo "規則A"; } location = /login { //精確匹配 /login 開頭的地址,匹配符合之後,不在繼續往下搜索 echo "規則B"; } location ^~ /blog/ { //非正則匹配,匹配/blog/後,中止往下搜索正則,採用這一條 echo "規則C"; } location ~ \.(gif|jpg|png|js|css)$ { //區分大小寫的正則匹配 若匹配成功,中止往下搜索正則,採用這一條 echo "規則D"; } location ~* \.png$ { //區分大小寫的正則匹配 ,中止往下搜索正則,採用這一條 echo "規則E"; } location / { //由於全部的地址都以 / 開頭,因此這條規則將匹配到全部請求 //若是沒任何規則匹配上,就採用這條規則 echo "規則F"; } location /blog/detail { //最長字符串匹配,若徹底匹配成功,就不在繼續匹配,不然還會進行正則匹配 echo "規則G"; } location /images { //最長字符串匹配,同上 echo "規則Y"; } location ^~ /static/files { //非正則匹配,若匹配成功,就不在繼續匹配 echo "規則X"; }