nginx location 在配置中的优先级
生活随笔
收集整理的這篇文章主要介紹了
nginx location 在配置中的优先级
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
轉(zhuǎn)載:http://blog.csdn.net/xy2204/article/details/47749405
?
?
先來(lái)一張nginx模型圖? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?VS? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 再來(lái)一張node模型圖
?
?
?
location表達(dá)式類型
- ~ 表示執(zhí)行一個(gè)正則匹配,區(qū)分大小寫(xiě)
- ~* 表示執(zhí)行一個(gè)正則匹配,不區(qū)分大小寫(xiě)
- ^~ 表示普通字符匹配。使用前綴匹配。如果匹配成功,則不再匹配其他location。
- = 進(jìn)行普通字符精確匹配。也就是完全匹配。
- @ 它定義一個(gè)命名的 location,使用在內(nèi)部定向時(shí),例如 error_page, try_files
?
?
location優(yōu)先級(jí)說(shuō)明
在nginx的location和配置中l(wèi)ocation的順序沒(méi)有太大關(guān)系。正location表達(dá)式的類型有關(guān)。相同類型的表達(dá)式,字符串長(zhǎng)的會(huì)優(yōu)先匹配。
以下是按優(yōu)先級(jí)排列說(shuō)明:
location優(yōu)先級(jí)示例
location = / {# 僅僅匹配請(qǐng)求 /[ configuration A ] } location / {# 匹配所有以 / 開(kāi)頭的請(qǐng)求。# 但是如果有更長(zhǎng)的同類型的表達(dá)式,則選擇更長(zhǎng)的表達(dá)式。# 如果有正則表達(dá)式可以匹配,則優(yōu)先匹配正則表達(dá)式。[ configuration B ] } location /documents/ {# 匹配所有以 /documents/ 開(kāi)頭的請(qǐng)求。# 但是如果有更長(zhǎng)的同類型的表達(dá)式,則選擇更長(zhǎng)的表達(dá)式。# 如果有正則表達(dá)式可以匹配,則優(yōu)先匹配正則表達(dá)式。[ configuration C ] } location ^~ /images/ {# 匹配所有以 /images/ 開(kāi)頭的表達(dá)式,如果匹配成功,則停止匹配查找。# 所以,即便有符合的正則表達(dá)式location,也不會(huì)被使用[ configuration D ] } location ~* \.(gif|jpg|jpeg)$ {# 匹配所有以 gif jpg jpeg結(jié)尾的請(qǐng)求。# 但是 以 /images/開(kāi)頭的請(qǐng)求,將使用 Configuration D[ configuration E ] }
請(qǐng)求匹配示例
/ -> configuration A /index.html -> configuration B /documents/document.html -> configuration C /images/1.gif -> configuration D /documents/1.jpg -> configuration E
注意,以上的匹配和在配置文件中定義的順序無(wú)關(guān)。
?
?
?
1. location正則寫(xiě)法
一個(gè)示例:
location = / {# 精確匹配 / ,主機(jī)名后面不能帶任何字符串[ configuration A ] } location / {# 因?yàn)樗械牡刂范家?/ 開(kāi)頭,所以這條規(guī)則將匹配到所有請(qǐng)求# 但是正則和最長(zhǎng)字符串會(huì)優(yōu)先匹配[ configuration B ] } location /documents/ {# 匹配任何以 /documents/ 開(kāi)頭的地址,匹配符合以后,還要繼續(xù)往下搜索# 只有后面的正則表達(dá)式?jīng)]有匹配到時(shí),這一條才會(huì)采用這一條[ configuration C ] } location ~ /documents/Abc {# 匹配任何以 /documents/ 開(kāi)頭的地址,匹配符合以后,還要繼續(xù)往下搜索# 只有后面的正則表達(dá)式?jīng)]有匹配到時(shí),這一條才會(huì)采用這一條[ configuration CC ] } location ^~ /images/ {# 匹配任何以 /images/ 開(kāi)頭的地址,匹配符合以后,停止往下搜索正則,采用這一條。[ configuration D ] } location ~* \.(gif|jpg|jpeg)$ {# 匹配所有以 gif,jpg或jpeg 結(jié)尾的請(qǐng)求# 然而,所有請(qǐng)求 /images/ 下的圖片會(huì)被 config D 處理,因?yàn)?^~ 到達(dá)不了這一條正則[ configuration E ] } location /images/ {# 字符匹配到 /images/,繼續(xù)往下,會(huì)發(fā)現(xiàn) ^~ 存在[ configuration F ] } location /images/abc {# 最長(zhǎng)字符匹配到 /images/abc,繼續(xù)往下,會(huì)發(fā)現(xiàn) ^~ 存在# F與G的放置順序是沒(méi)有關(guān)系的[ configuration G ] } location ~ /images/abc/ {# 只有去掉 config D 才有效:先最長(zhǎng)匹配 config G 開(kāi)頭的地址,繼續(xù)往下搜索,匹配到這一條正則,采用[ configuration H ] } location ~* /js/.*/\.js
- 已=開(kāi)頭表示精確匹配
如 A 中只匹配根目錄結(jié)尾的請(qǐng)求,后面不能帶任何字符串。 - ^~?開(kāi)頭表示uri以某個(gè)常規(guī)字符串開(kāi)頭,不是正則匹配
- ~ 開(kāi)頭表示區(qū)分大小寫(xiě)的正則匹配;
- ~* 開(kāi)頭表示不區(qū)分大小寫(xiě)的正則匹配
- / 通用匹配, 如果沒(méi)有其它匹配,任何請(qǐng)求都會(huì)匹配到
順序不等于優(yōu)先級(jí):
(location =) > (location 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分起始路徑) > (/)
上面的匹配結(jié)果。按照上面的location寫(xiě)法,以下的匹配示例成立:
- / -> config A
精確完全匹配,即使/index.html也匹配不了 - /downloads/download.html -> config B
匹配B以后,往下沒(méi)有任何匹配,采用B - /images/1.gif -> configuration D
匹配到F,往下匹配到D,停止往下 - /images/abc/def -> config D
最長(zhǎng)匹配到G,往下匹配D,停止往下
你可以看到 任何以/images/開(kāi)頭的都會(huì)匹配到D并停止,FG寫(xiě)在這里是沒(méi)有任何意義的,H是永遠(yuǎn)輪不到的,這里只是為了說(shuō)明匹配順序 - /documents/document.html -> config C
匹配到C,往下沒(méi)有任何匹配,采用C - /documents/1.jpg -> configuration E
匹配到C,往下正則匹配到E - /documents/Abc.jpg -> config CC
最長(zhǎng)匹配到C,往下正則順序匹配到CC,不會(huì)往下到E
實(shí)際使用建議
所以實(shí)際使用中,個(gè)人覺(jué)得至少有三個(gè)匹配規(guī)則定義,如下:
#直接匹配網(wǎng)站根,通過(guò)域名訪問(wèn)網(wǎng)站首頁(yè)比較頻繁,使用這個(gè)會(huì)加速處理,官網(wǎng)如是說(shuō)。 #這里是直接轉(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/ {root /webroot/static/; } location ~* \.(gif|jpg|jpeg|png|css|js|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/ }
轉(zhuǎn)載于:https://www.cnblogs.com/cangqiongbingchen/p/6728433.html
總結(jié)
以上是生活随笔為你收集整理的nginx location 在配置中的优先级的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: css3-响应式布局
- 下一篇: android ViewPager之Pa