欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2020年03月11日 14:31:06   作者:tonysengj  
在本篇文章里小編給大家整理的是關(guān)于nginx 配置location匹配規(guī)則實例講解內(nèi)容,需要的朋友們學(xué)習(xí)下。

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

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

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

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

  • 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.

=前綴的指令嚴格匹配這個查詢。如果找到,停止搜索。

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

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

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

例如

location = / { 
 # 只匹配"/". 
 [ configuration A ]  
} 
location / { 
 # 匹配任何請求,因為所有請求都是以"/"開始 
 # 但是更長字符匹配或者正則表達式匹配會優(yōu)先匹配 
 [ configuration B ]  
} 
location ^~ /images/ { 
 # 匹配任何以 /images/ 開始的請求,并停止匹配 其它location 
 [ configuration C ]  
} 
location ~* \.(gif|jpg|jpeg)$ { 
 # 匹配以 gif, jpg, or jpeg結(jié)尾的請求.  
 # 但是所有 /images/ 目錄的請求將由 [Configuration C]處理.   
 [ configuration D ]  
} 

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

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

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

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

​例如,對下面的請求有:

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

2,/some/other/url -> 首先前綴部分字符串匹配到了第2個location,然后進行正則匹配,顯然沒有匹配上,則使用第2個location的配置configurationB

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

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

請求URI例子:

/ -> 符合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í)行一個正則匹配,區(qū)分大小寫
  • ~* #表示執(zhí)行一個正則匹配,不區(qū)分大小寫
  • ^~ #^~表示普通字符匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄
  • = #進行普通字符精確匹配
  • @ #"@" 定義一個命名的 location,使用在內(nèi)部定向時,例如 error_page, try_files

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

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

普通字符匹配,正則表達式規(guī)則和長的塊規(guī)則將被優(yōu)先和查詢匹配,也就是說如果該項匹配還需去看有沒有正則表達式匹配和更長的匹配。

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

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

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

相關(guān)文章

  • 一文快速了解Nginx超時設(shè)置

    一文快速了解Nginx超時設(shè)置

    這篇文章主要給大家介紹了關(guān)于如何通過一文快速了解Nginx超時設(shè)置的相關(guān)資料,:后端正常的業(yè)務(wù)處理時間超過了nginx的超時時間,導(dǎo)致nginx主動返回504,為解決這個問題,我們網(wǎng)上搜索發(fā)現(xiàn)可以通過調(diào)整這幾個參數(shù)來調(diào)大nginx的超時時間,需要的朋友可以參考下
    2023-11-11
  • nginx配置ssl實現(xiàn)https的方法示例

    nginx配置ssl實現(xiàn)https的方法示例

    這篇文章主要介紹了nginx配置ssl實現(xiàn)https的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Nginx動態(tài)IP黑名單的實現(xiàn)步驟

    Nginx動態(tài)IP黑名單的實現(xiàn)步驟

    為了封禁某些爬蟲或者惡意用戶對服務(wù)器的請求,我們需要建立一個動態(tài)的?IP?黑名單,本文主要介紹了Nginx動態(tài)IP黑名單的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • Nginx搭建負載均衡集群的實現(xiàn)

    Nginx搭建負載均衡集群的實現(xiàn)

    這篇文章主要介紹了Nginx搭建負載均衡集群的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 記錄一次nginx啟動失敗的解決過程

    記錄一次nginx啟動失敗的解決過程

    小編最近遇到這樣一個問題docker nginx起不來了,導(dǎo)致jira域名映射失敗,如何解決呢?下面小編給大家分享下nginx啟動失敗的解決過程,感興趣的朋友一起看看吧
    2022-02-02
  • Keepalived實現(xiàn)Nginx負載均衡高可用的示例代碼

    Keepalived實現(xiàn)Nginx負載均衡高可用的示例代碼

    這篇文章主要介紹了Keepalived實現(xiàn)Nginx負載均衡高可用的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • nginx如何指向本地路徑及500錯誤解決方法

    nginx如何指向本地路徑及500錯誤解決方法

    這篇文章主要為大家介紹了nginx如何指向本地路徑及500錯誤解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 記錄Nginx服務(wù)器的Split Clients模塊配置過程

    記錄Nginx服務(wù)器的Split Clients模塊配置過程

    這篇文章主要介紹了Nginx服務(wù)器的Split Clients模塊的配置過程記錄,ngx-http-split-clients模塊用于切分客戶端連接,需要的朋友可以參考下
    2016-01-01
  • 一文弄懂Nginx熱升級

    一文弄懂Nginx熱升級

    Nginx熱升級指服務(wù)不中斷情況下用新的Nginx二進制文件替換老的Nginx二進制文件,本文就來介紹一下Nginx熱升級,感興趣的可以了解一下
    2024-05-05
  • Nginx配置ssl證書(https)的全過程

    Nginx配置ssl證書(https)的全過程

    這篇文章主要介紹了Nginx配置ssl證書(https)的過程,在文中大家需要特別注意,如果有防火墻的話,記得開通443端口,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-10-10

最新評論