03 nginx lcoation配置寫法

1. location匹配命令

標識符 描述
= 精確匹配;用於標準uri前,要求請求字符串和uri嚴格匹配。若是匹配成功,就中止匹配,當即執行該location裏面的請求。
~ 正則匹配;用於正則uri前,表示uri裏面包含正則,而且區分大小寫。
~* 正則匹配;用於正則uri前,表示uri裏面包含正則,不區分大小寫。
^~ 非正則匹配;用於標準uri前,nginx服務器匹配到前綴最多的uri後就結束,該模式匹配成功後,不會使用正則匹配。
普通匹配(最長字符匹配);與location順序無關,是按照匹配的長短來取匹配結果。若徹底匹配,就中止匹配。

備註css

一、若是uri裏面包含正則表達式,就必須使用~或~*標識符;nginx

二、針對~和~*匹配標識符,能夠在前面加上!來取反,以下:正則表達式

!~表示正則不匹配,區分大小寫。服務器

!~*表示正則不匹配,不區分大小寫。code

2. location匹配實戰

2.1 「=」精準匹配案例

location  = /login {
# 精確匹配 /login ,匹配成功後,當即結束
}

2.2 「~」區分大小寫正則匹配案例

location ~ /images/ {
#正則匹配,區分大小寫,匹配成功後,當即結束
}

2.3 「~*」不區分大小寫正則匹配案例

location ~* /images/ {
#正則匹配,不區分大小寫,匹配成功後,當即結束
}

2.4 「^~」 不進行正則匹配的標準匹配

location ^~ /images/ {

# 匹配任何以 /images/ 開頭的地址,匹配符合之後,中止往下搜索正則,採用這一條。

}

2.5 普通匹配(最長字符匹配)

location  /blog/ {
# 與location順序無關
# 若徹底匹配成功,就不在繼續匹配,不然還會進行正則匹配
}

3 匹配優先級(匹配順序)

在沒有標識符的請求下,匹配規則以下: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";
}
相關文章
相關標籤/搜索