語法規(guī)則:
location [=|~|~*|^~] /uri/ { … }
= 開頭表示精確匹配
**^~ **開頭表示uri以某個常規(guī)字符串開頭粥诫,理解為匹配 url路徑即可。nginx不對url做編碼,因此請求為/static/20%/aa碌嘀,可以被規(guī)則^~ /static/ /aa匹配到(注意是空格)秃励。
~ 開頭表示區(qū)分大小寫的正則匹配
~*開頭表示不區(qū)分大小寫的正則匹配
!~和!~*分別為區(qū)分大小寫不匹配及不區(qū)分大小寫不匹配 的正則
**/ **通用匹配便锨,任何請求都會匹配到围辙。
首先匹配 =,其次匹配^~, 然后是按文件中順序的正則匹配,最后是交給 / 通用匹配放案。當(dāng)有匹配成功時候姚建,停止匹配,按當(dāng)前匹配規(guī)則處理請求吱殉。
例子掸冤,有如下匹配規(guī)則:
location = / {
#規(guī)則A
}
location = /login {
#規(guī)則B
}
location ^~ /static/ {
#規(guī)則C
}
location ~ \.(gif|jpg|png|js|css)$ {
#規(guī)則D
}
location ~* \.png$ {
#規(guī)則E
}
location !~ \.xhtml$ {
#規(guī)則F
}
location !~* \.xhtml$ {
#規(guī)則G
}
location / {
#規(guī)則H
}
那么產(chǎn)生的效果如下:
訪問根目錄/, 比如http://localhost/ 將匹配規(guī)則A
訪問 http://localhost/login 將匹配規(guī)則B友雳,http://localhost/register 則匹配規(guī)則H
訪問 http://localhost/static/a.html 將匹配規(guī)則C
訪問 http://localhost/a.gif, http://localhost/b.jpg 將匹配規(guī)則D和規(guī)則E稿湿,但是規(guī)則D順序優(yōu)先,規(guī)則E不起作用押赊,而 http://localhost/static/c.png 則優(yōu)先匹配到 規(guī)則C
訪問 http://localhost/a.PNG 則匹配規(guī)則E饺藤, 而不會匹配規(guī)則D,因?yàn)橐?guī)則E不區(qū)分大小寫流礁。
訪問 http://localhost/a.xhtml 不會匹配規(guī)則F和規(guī)則G涕俗,http://localhost/a.XHTML不會匹配規(guī)則G,因?yàn)椴粎^(qū)分大小寫神帅。規(guī)則F再姑,規(guī)則G屬于排除法,符合匹配規(guī)則但是不會匹配到找御,所以想想看實(shí)際應(yīng)用中哪里會用到元镀。
訪問 http://localhost/category/id/1111 則最終匹配到規(guī)則H,因?yàn)橐陨弦?guī)則都不匹配萎坷,這個時候應(yīng)該是nginx轉(zhuǎn)發(fā)請求給后端應(yīng)用服務(wù)器凹联,比如FastCGI(php),tomcat(jsp)哆档,nginx作為方向代理服務(wù)器存在。