1 Location語(yǔ)法規(guī)則
1.1 Location規(guī)則
語(yǔ)法規(guī)則: location [=||*|^~] /uri/ {… }
首先匹配 =,其次匹配^~,其次是按文件中順序的正則匹配,最后是交給 /通用匹配。當(dāng)有匹配成功時(shí)候,停止匹配,按當(dāng)前匹配規(guī)則處理請(qǐng)求。
符號(hào) | 含義 |
---|---|
= | = 開頭表示精確匹配 |
^~ | ^~開頭表示uri以某個(gè)常規(guī)字符串開頭,理解為匹配 url路徑即可。nginx不對(duì)url做編碼,因此請(qǐng)求為/static/20%/aa,可以被規(guī)則^~ /static/ /aa匹配到(注意是空格) |
~ | ~ 開頭表示區(qū)分大小寫的正則匹配 |
~* | ~* 開頭表示不區(qū)分大小寫的正則匹配 |
!和!* | !和!*分別為區(qū)分大小寫不匹配及不區(qū)分大小寫不匹配的正則 |
/ | 用戶所使用的代理(一般為瀏覽器) |
$http_x_forwarded_for | 可以記錄客戶端IP,通過(guò)代理服務(wù)器來(lái)記錄客戶端的ip地址 |
$http_referer | 可以記錄用戶是從哪個(gè)鏈接訪問(wèn)過(guò)來(lái)的 |
匹配規(guī)則示例:
location = / {
#規(guī)則A
}
location = /login {
#規(guī)則B
}
location ^~ /static/ {
#規(guī)則C
}
location ~ \.(gif|jpg|png|js|css)$ {
#規(guī)則D
}
location ~* \.(gif|jpg|png|js|css)$ {
#規(guī)則E
}
location !~ \.xhtml$ {
#規(guī)則F
}
location !~* \.xhtml$ {
#規(guī)則G
}
location / {
#規(guī)則H
}
那么產(chǎn)生的效果如下:
- 訪問(wèn)根目錄/,比如http://localhost/將匹配規(guī)則A
- 訪問(wèn) http://localhost/login 將匹配規(guī)則B,http://localhost/register則匹配規(guī)則H
- 訪問(wèn) http://localhost/static/a.html 將匹配規(guī)則C
- 訪問(wèn) 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
- 訪問(wèn) http://localhost/a.PNG 則匹配規(guī)則E,而不會(huì)匹配規(guī)則D,因?yàn)橐?guī)則E不區(qū)分大小寫。
- 訪問(wèn) http://localhost/a.xhtml 不會(huì)匹配規(guī)則F和規(guī)則G,http://localhost/a.XHTML不會(huì)匹配規(guī)則G,因?yàn)椴粎^(qū)分大小寫。規(guī)則F,規(guī)則G屬于排除法,符合匹配規(guī)則但是不會(huì)匹配到,所以想想看實(shí)際應(yīng)用中哪里會(huì)用到。
- 訪問(wèn) http://localhost/category/id/1111 則最終匹配到規(guī)則H,因?yàn)橐陨弦?guī)則都不匹配,這個(gè)時(shí)候應(yīng)該是nginx轉(zhuǎn)發(fā)請(qǐng)求給后端應(yīng)用服務(wù)器,比如FastCGI(PHP),tomcat(jsp),nginx作為反向代理服務(wù)器存在。
1.2 實(shí)際常用規(guī)則
#直接匹配網(wǎng)站根目錄,通過(guò)域名訪問(wèn)網(wǎng)站首頁(yè)比較頻繁,使用這個(gè)會(huì)加速處理。
#這里是直接轉(zhuǎn)發(fā)給后端應(yīng)用服務(wù)器了,也可以是一個(gè)靜態(tài)首頁(yè)
#第一個(gè)必選規(guī)則
location = / {
proxy_pass http://tomcat:8080/index
}
第二個(gè)必選規(guī)則是處理靜態(tài)文件請(qǐng)求,這是nginx作為http服務(wù)器的強(qiáng)項(xiàng)
有兩種配置模式,目錄匹配或后綴匹配,任選其一或搭配使用
location ^~ /static/ {
# 請(qǐng)求/static/a.txt 將被映射到實(shí)際目錄文件:/webroot/res/static/a.txt
root /webroot/res/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|html|ico)${
root /webroot/res/;
}
第三個(gè)規(guī)則就是通用規(guī)則,用來(lái)轉(zhuǎn)發(fā)動(dòng)態(tài)請(qǐng)求到后端應(yīng)用服務(wù)器
非靜態(tài)文件請(qǐng)求就默認(rèn)是動(dòng)態(tài)請(qǐng)求,自己根據(jù)實(shí)際把握
畢竟目前的一些框架的流行,帶.php,.jsp后綴的情況很少了
location / {
proxy_pass http://tomcat:8080/
}
1.3 Location解析過(guò)程
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-479918.html
梳理[大概]:
1、 先判斷精準(zhǔn)命中,如果命中,立即返回結(jié)果并結(jié)束解析過(guò)程。
2、 判斷普通命中,如果有多個(gè)命中,“記錄”下來(lái)“最長(zhǎng)”的命中結(jié)果(記錄但不結(jié)束,最長(zhǎng)的為準(zhǔn))[一會(huì)還要梳理]。
3、 繼續(xù)判斷正則表達(dá)式的解析結(jié)果,按配置里的正則表達(dá)式順序?yàn)闇?zhǔn),由上至下開始匹配,一旦匹配成功1個(gè),立即返回結(jié)果,并結(jié)束解析過(guò)程。
4、 普通命中順序無(wú)所謂,是因?yàn)榘疵械拈L(zhǎng)短來(lái)確定。正則命中,順序有所謂,因?yàn)槭菑那巴竺械摹?span toymoban-style="hidden">文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-479918.html
到了這里,關(guān)于Nginx擴(kuò)展篇之Location語(yǔ)法規(guī)則的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!