一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

云服務(wù)器|WEB服務(wù)器|FTP服務(wù)器|郵件服務(wù)器|虛擬主機(jī)|服務(wù)器安全|DNS服務(wù)器|服務(wù)器知識(shí)|Nginx|IIS|Tomcat|

服務(wù)器之家 - 服務(wù)器技術(shù) - Nginx - nginx 配置location匹配規(guī)則實(shí)例講解

nginx 配置location匹配規(guī)則實(shí)例講解

2020-07-26 21:52tonysengj Nginx

在本篇文章里小編給大家整理的是關(guān)于nginx 配置location匹配規(guī)則實(shí)例講解內(nèi)容,需要的朋友們學(xué)習(xí)下。

nginx的配置指令的作用域可以分為 main,server,location這3個(gè)種,實(shí)際上這3者不是依次包含的關(guān)系,而是相互獨(dú)立的關(guān)系,比如一個(gè)只具有main級(jí)別作用域的指令,是不能寫(xiě)在某個(gè)server或者location內(nèi)的,模塊的某個(gè)指令可以同時(shí)具有main,server,location這3種作用域,另外每個(gè)模塊有 main,srv,loc這3個(gè)級(jí)別的配置,一個(gè)模塊的main級(jí)別的配置對(duì)所有的server和location都是共享的,srv級(jí)別的配置對(duì)所有 location都是共享的,location只有自己獨(dú)立的loc級(jí)別的配置,這就是為什么一個(gè)模塊的srv和loc級(jí)別的配置需要merge,而 main級(jí)別的配置不需要merge的原因。這里看起來(lái)有點(diǎn)繞,區(qū)分一下main,server,location分別作為一種作用域級(jí)別和一個(gè)主體,類(lèi)似于形容詞和名字的區(qū)別,nginx的配置關(guān)系還是不難理解的。

?一般來(lái)說(shuō)一個(gè)請(qǐng)求url過(guò)來(lái),nginx會(huì)將它解析到某一個(gè)location來(lái)處理。這個(gè)解析的過(guò)程實(shí)際上根據(jù)location的配置基本可以分為字符串匹配和正則表達(dá)式匹配這2種。對(duì)于location的組織方式,最簡(jiǎn)單的就是直接將它們保存為一個(gè)鏈表,解析url的時(shí)候一個(gè)一個(gè)遍歷即可找到相應(yīng)location,但是這樣效率太低,對(duì)像nginx這種高性能的服務(wù)器來(lái)說(shuō)是完全不可取的,nginx將字符串匹配的location組織成了一個(gè)三叉的字符串排序樹(shù),而且建立的時(shí)候也考慮了樹(shù)的平衡性。文章后面我講詳細(xì)介紹源碼的實(shí)現(xiàn)。

?首先我來(lái)大概的介紹一下location的種類(lèi)和匹配規(guī)則,以nginx wiki(http://wiki.nginx.org/HttpCoreModule#location)的例子做說(shuō)明:

location 優(yōu)先級(jí)官方文檔

  • Directives with the = prefix that match the query exactly. If found, searching stops.
  • All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.
  • Regular expressions, in order of definition in the configuration file.
  • If #3 yielded a match, that result is used. Else the match from #2 is used.

=前綴的指令嚴(yán)格匹配這個(gè)查詢(xún)。如果找到,停止搜索。

所有剩下的常規(guī)字符串,最長(zhǎng)的匹配。如果這個(gè)匹配使用^?前綴,搜索停止。

正則表達(dá)式,在配置文件中定義的順序。

如果第3條規(guī)則產(chǎn)生匹配的話(huà),結(jié)果被使用。否則,如同從第2條規(guī)則被使用。

例如

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
location = / {
 # 只匹配"/".
 [ configuration A ] 
}
location / {
 # 匹配任何請(qǐng)求,因?yàn)樗姓?qǐng)求都是以"/"開(kāi)始
 # 但是更長(zhǎng)字符匹配或者正則表達(dá)式匹配會(huì)優(yōu)先匹配
 [ configuration B ] 
}
location ^~ /images/ {
 # 匹配任何以 /images/ 開(kāi)始的請(qǐng)求,并停止匹配 其它location
 [ configuration C ] 
}
location ~* \.(gif|jpg|jpeg)$ {
 # 匹配以 gif, jpg, or jpeg結(jié)尾的請(qǐng)求. 
 # 但是所有 /images/ 目錄的請(qǐng)求將由 [Configuration C]處理.  
 [ configuration D ] 
}

可以看到上面的例子中有5種不同類(lèi)型的location,其中第4個(gè)帶 “~” 號(hào)前綴的為需要正則匹配的location,nginx在進(jìn)行url解析時(shí)對(duì)這5種不同類(lèi)型的location具有不同的優(yōu)先級(jí)規(guī)則,大致的規(guī)則如下:

1,字符串精確匹配到一個(gè)帶 “=” 號(hào)前綴的location,則停止,且使用這個(gè)location的配置;

2,字符串匹配剩下的非正則和非特殊location,如果匹配到某個(gè)帶 "^~" 前綴的location,則停止;

3,正則匹配,匹配順序?yàn)閘ocation在配置文件中出現(xiàn)的順序。如果匹配到某個(gè)正則location,則停止,并使用這個(gè)location的配置;否則,使用步驟2中得到的具有最大字符串匹配的location配置。

?例如,對(duì)下面的請(qǐng)求有:

1, / -> 精確匹配到第1個(gè)location,匹配停止,使用configuration A

2,/some/other/url -> 首先前綴部分字符串匹配到了第2個(gè)location,然后進(jìn)行正則匹配,顯然沒(méi)有匹配上,則使用第2個(gè)location的配置configurationB

3,/images /1.jpg -> 首先前綴部分字符串匹配到了第2個(gè)location,但是接著對(duì)第3個(gè)location也前綴匹配上了,而且這時(shí)已經(jīng)是配置文件里面對(duì)這個(gè)url的最大字符串匹配了,并且location帶有 "^~" 前綴,則不再進(jìn)行正則匹配,最終使用configuration C

4,/some/other/path/to/1.jpg -> 首先前綴部分同樣字符串匹配到了第2個(gè)location,然后進(jìn)行正則匹配,這時(shí)正則匹配成功,則使用congifuration D

請(qǐng)求URI例子:

?
1
2
3
4
5
6
7
8
9
10
/ -> 符合configuration A
/documents/document.html -> 符合configuration B
/images/1.gif -> 符合configuration C
/documents/1.jpg ->符合 configuration D
@location 例子
error_page 404 = @fetch;
 
location @fetch(
proxy_pass http://fetch;
)

location匹配命令

  • ~ #波浪線表示執(zhí)行一個(gè)正則匹配,區(qū)分大小寫(xiě)
  • ~* #表示執(zhí)行一個(gè)正則匹配,不區(qū)分大小寫(xiě)
  • ^~ #^~表示普通字符匹配,如果該選項(xiàng)匹配,只匹配該選項(xiàng),不匹配別的選項(xiàng),一般用來(lái)匹配目錄
  • = #進(jìn)行普通字符精確匹配
  • @ #"@" 定義一個(gè)命名的 location,使用在內(nèi)部定向時(shí),例如 error_page, try_files

location 匹配的優(yōu)先級(jí)(與location在配置文件中的順序無(wú)關(guān))

= 精確匹配會(huì)第一個(gè)被處理。如果發(fā)現(xiàn)精確匹配,nginx停止搜索其他匹配。

普通字符匹配,正則表達(dá)式規(guī)則和長(zhǎng)的塊規(guī)則將被優(yōu)先和查詢(xún)匹配,也就是說(shuō)如果該項(xiàng)匹配還需去看有沒(méi)有正則表達(dá)式匹配和更長(zhǎng)的匹配。

^~ 則只匹配該規(guī)則,nginx停止搜索其他匹配,否則nginx會(huì)繼續(xù)處理其他location指令。

最后匹配理帶有"~"和"~*"的指令,如果找到相應(yīng)的匹配,則nginx停止搜索其他匹配;當(dāng)沒(méi)有正則表達(dá)式或者沒(méi)有正則表達(dá)式被匹配的情況下,那么匹配程度最高的逐字匹配指令會(huì)被使用。

到此這篇關(guān)于nginx 配置location匹配規(guī)則實(shí)例講解的文章就介紹到這了,更多相關(guān)nginx 配置location匹配規(guī)則內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://www.cnblogs.com/yyxianren/p/12461952.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲第一永久色 | 美女被狂揉下部羞羞动漫 | 99r视频在线观看 | 99爱在线观看精品视频 | 日韩毛片在线视频 | 2020国产精品永久在线观看 | 青草精品 | 国产日韩精品一区二区在线观看 | 精品手机在线视频 | 猛男深夜狂cao小男生 | 久草草在线视视频 | 久久精品熟女亚洲AV国产 | 精品无码国产AV一区二区三区 | ass性强迫rape| 亚洲欧美日韩国产综合专区 | 成人亚洲欧美日韩中文字幕 | 国产精品久久久久久岛国 | 女子监狱第二季未删减在线看 | 欧美日韩在线一区 | sss在线观看免费视频 | yy6080午夜国产免费福利 | 日韩日韩日韩手机看片自拍 | 欧美亚洲国产另类在线观看 | 奇米影视7777 | 色综合视频在线观看 | 高清视频在线播放ww | 国产90后美女露脸在线观看 | 成人精品免费网站 | 视频一区国产精戏刘婷30 | 毛片免费网站 | 国产伦精品一区二区 | 美女露全身永久免费网站 | 好男人资源大全免费观看 | 精品国偷自产在线 | 国产精品高清一区二区三区不卡 | 男人女人日皮视频 | 五月天黄网 | 久久这里只精品热在线18 | 亚洲大逼 | 日韩性公交车上xxhd免费 | 欧美肥乳|