Nginx - Location 匹配規則

語法規則

location = /uri     = 表示精確匹配某個uri
location ^~ /uri      ^~ 表示精確的前綴匹配以uri開頭的請求,優先級在正則之前
location ~ uri      ~ 表示區分大小寫的正則匹配,這裏的uri就是一個正則表達式
location ~* uri        ~* 表示不區分大小寫的正則匹配,這裏的uri就是一個正則表達式
location /uri         不帶修飾符,表示精確的前綴匹配以uri開頭的請求,優先級在正則之後
location /           通用匹配,未匹配到其他location的請求都會走到這裏。 
                      其實就相當於匹配以/開頭的請求,自然就能匹配全部

匹配順序優先級

當存在多個同級location時,表達式越精確,優先級越高

例如:匹配http://localhost/wapabcd 時,/wap 優先級高於/wa

當存在多個不同級location時,匹配的優先級如下:

1、 =(完全精確匹配)
2、 ^~(帶修飾符的前綴精確匹配)
3、 ~(區分大小寫的正則匹配)
4、 ~*(不區分大小寫的正則匹配)
5、 /uri(無修飾符的前綴精確匹配)
6、 /(通用匹配)

例子:


#rule1 ,精確匹配http://localhost/q/a.html
location = /q/a.html {
echo “rule ‘=’, /q/a.html”;
}

#rule2 ,匹配以q開始的請求,如:http://localhost/qwer、http://localhost/q/
#但無法匹配 http://localhost/q/a.html,因爲rule1優先級高於rule2,所以會被rule1截獲
location ^~ /q { abc
    echo "rule '^~',start with /q";
}

#rule3  這裏功能和rule2相同,但是無法生效,因爲正則的優先級低於^~
location ~ ^/q.* { 
    echo "regular expression '~',start with /q";
}

#rule4  這裏匹配所有以.js/.css結尾的請求,如http://localhost/a/jquery.js,
#但無法匹配http://localhost/q/jquery.js,因爲rule2優先級高於rule4,所以會被rul2截獲
location ~ \.(js|css)$ {
    echo "regular expression '~',end with .js/.css";
}

#rule5  這裏匹配不區分大小寫的以.js/,css結尾的請求,如http://localhost/a/jquery.JS
location ~* \.(js|css)$ {
    echo "regular expression '~',end with .jpeg/.css";
}

#rule6  無修飾符地匹配以w開始的請求,如http://localhost/wert、http://localhost/w/
#但無法匹配 http://localhost/w/a.js,因爲rule4/5的優先級高於rule6
location /w {
    echo "rule no modifier '/w',start with /w";
}

#rule7  無修飾符地匹配以wa開始的請求,如http://localhost/waert、http://localhost/wa/
#此時優先級高於rule6,因爲在修飾符相同的情況下,越精確則越優先
location /wa {
    echo "rule no modifier '/wa',start with /wa";
}   

#rule8  通用匹配,接受所有未被其他location捕獲的請求
#其實本質上是因爲所有請求都是以/開始的,所以能夠匹配所有請求
location / {
    echo "rule '/', match all requests"
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章