亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

nginx中的正則表達(dá)式,location路徑匹配規(guī)則和優(yōu)先級(jí)

admin
2025年7月21日 0:6 本文熱度 1470

前言,我這里驗(yàn)證的nginx-v1.23.2單機(jī)環(huán)境下的nginx中的正則表達(dá)式、location路徑匹配規(guī)則和優(yōu)先級(jí)。
先準(zhǔn)備好環(huán)境,基礎(chǔ)配置是這樣 nginx/conf/conf.d/host.conf :

server {
    listen 8081;
    server_name  10.90.5.70;

    proxy_connect_timeout 60;
    proxy_read_timeout 600;
    proxy_send_timeout 600;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto   "http";
    proxy_set_header    Host                $host;
    proxy_http_version  1.1;
    proxy_set_header    Connection  "";
    proxy_next_upstream error non_idempotent;

    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

下面的案例都是基于以上配置驗(yàn)證的。


一,nginx中的正則表達(dá)式

nginx中的正則表達(dá)式基本遵循了Regular Expression格式和規(guī)則。不同的是,一般以特殊字符代表正則表達(dá)式的開(kāi)始,即標(biāo)識(shí)要用Regular Expression處理其后的字符。
nginx里面可以使用正則表達(dá)式的部分可以是 server里,或者location 路徑上。

常見(jiàn)的正則表達(dá)式的含義

^ :匹配輸入字符串的起始位置
$ :匹配輸入字符串的結(jié)束位置
. :匹配除“\n”之外的任何單個(gè)字符,若要匹配包括“\n”在內(nèi)的任意字符,請(qǐng)使用諸如“[.\n]”之類(lèi)的模式
\d :匹配純數(shù)字
\w :匹配字母或數(shù)字或下劃線或漢字
\s :匹配任意的空白符
\b :匹配單詞的開(kāi)始或結(jié)束

【下面這部分是標(biāo)注匹配長(zhǎng)度(字符數(shù)量、重復(fù)數(shù)量)的】
* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+ :匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
{n} :重復(fù) n 次
{n,} :重復(fù) n 次或更多次
{n,m} :重復(fù) n 到 m 次

[] :定義匹配的字符范圍
[c] :匹配單個(gè)字符 c
注意:在括號(hào)里面用-表示范圍:
[a-z] :匹配 a-z 小寫(xiě)字母的任意一個(gè)
[a-zA-Z0-9] :匹配所有大小寫(xiě)字母或數(shù)字
() :表達(dá)式的開(kāi)始和結(jié)束位置 例如:(jpg|gif|swf|)

| :或運(yùn)算符
! :非運(yùn)算符(與其后面的表達(dá)式去反運(yùn)算)
正則表達(dá)式里面沒(méi)有“與運(yùn)算符”。

\ :轉(zhuǎn)義字符,將后面接著的字符標(biāo)記為一個(gè)特殊字符或一個(gè)原義字符或一個(gè)向后引用。如“\n”匹配一個(gè)換行符,而“\$”則匹配“$”

參考鏈接:https://www.jb51.net/article/149053.htm

二,location路徑匹配規(guī)則和優(yōu)先級(jí)

location:用來(lái)設(shè)置請(qǐng)求的URI。nginx中l(wèi)ocation配置項(xiàng)是最基礎(chǔ)的配置,而且它的配置也稍顯復(fù)雜。

location匹配規(guī)則 與 優(yōu)先級(jí)

默認(rèn)值 /
語(yǔ)法 location [ = | ~ | ~* | ^~ ] uri { ... }
位置 server,location
uri變量是待匹配的請(qǐng)求字符串,可以不包含正則表達(dá)式,也可以包含正則表達(dá)式。那么:

nginx服務(wù)器在搜索匹配location的時(shí)候,是先使用不包含正則表達(dá)式進(jìn)行匹配,找到一個(gè)匹配度最高的一個(gè),然后在通過(guò)包含正則表達(dá)式的進(jìn)行匹配,如果能匹配到直接訪問(wèn),匹配不到,就使用剛才匹配度最高的那個(gè)location來(lái)處理請(qǐng)求。

另一種描述,意思是一樣的:

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ì)被使用。

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

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

1.  =前綴的指令嚴(yán)格匹配這個(gè)查詢(xún)。如果找到,停止搜索。
2.  所有剩下的常規(guī)字符串,最長(zhǎng)的匹配。如果這個(gè)匹配使用^?前綴,搜索停止。
3.  正則表達(dá)式,在配置文件中定義的順序。
4.  如果第3條規(guī)則產(chǎn)生匹配的話,結(jié)果被使用。否則,如同從第2條規(guī)則被使用。

它包含了路徑的匹配規(guī)則和針對(duì)該規(guī)則的配置。

location規(guī)則按照前導(dǎo)符主要分五類(lèi):
代號(hào)
前導(dǎo)符
說(shuō)明
= uri
全字匹配,只有當(dāng)請(qǐng)求路徑和uri完全匹配時(shí),對(duì)應(yīng)的規(guī)則才會(huì)生效
~ regular
區(qū)分大小寫(xiě)的正則匹配
~* regular
不區(qū)分大小寫(xiě)的正則匹配
^~ uri
否定正則的路徑匹配
url
沒(méi)有任何前導(dǎo)符的路徑匹配

這五類(lèi)規(guī)則,同時(shí)存在配置文件中時(shí),按照一定的優(yōu)先級(jí)規(guī)則生效。
優(yōu)先級(jí):( location = ) > ( location 完整路徑 ) > ( location ^~ 否定正則 ) > ( location ~* 正則順序 ) > ( location ~ 區(qū)分大小寫(xiě)正則順序 ) > ( location 部分起始路徑 ) > ( / )
優(yōu)先級(jí):① > ④ > ③ > ② > ⑤

nginx規(guī)則決定流程如下圖:

文字說(shuō)明:
以下說(shuō)明非常關(guān)鍵
一、檢查請(qǐng)求uri是否與某個(gè)=規(guī)則匹配,如果有,直接應(yīng)用規(guī)則,終止后續(xù)匹配。
二、nginx首先檢查所有路徑匹配規(guī)則配置項(xiàng),包括"^~"規(guī)則和沒(méi)有前導(dǎo)符號(hào)的規(guī)則,選擇并記住和當(dāng)前請(qǐng)求uri匹配度最長(zhǎng)的配置項(xiàng)。但這個(gè)時(shí)候,并不會(huì)啟用相關(guān)的配置,而僅僅是記住。
三、判斷上一步中選擇下來(lái)的路徑規(guī)則是否包含 ^~ ,如果包含,則使用該條規(guī)則,終止后續(xù)匹配。
四、按配置順序進(jìn)行正則表達(dá)式檢查,匹配到第一條合適的正則表達(dá)式時(shí),使用該條規(guī)則,終止后續(xù)匹配。
五、使用步驟三選擇出來(lái)的路徑匹配規(guī)則。

下面以實(shí)例屬性介紹:

1,不帶符號(hào),要求必須以指定模式開(kāi)始

location指令實(shí)例:

server {
    listen 8081;
    server_name 127.0.0.1;

# 不帶符號(hào),要求必須以指定模式開(kāi)始(區(qū)分大小寫(xiě),并且后面帶/是有區(qū)別的)
   location /aaa {
        default_type text/plain;
return 200 "access success aaa \n\r";
   }
}

# 能匹配到:
http://127.0.0.1:8081/aaa
http://127.0.0.1:8081/aaa/
http://127.0.0.1:8081/aaadef
http://127.0.0.1:8081/aaa/def/
http://127.0.0.1:8081/aaa?p1=TOM

# 不能匹配到(大小寫(xiě)區(qū)分):
http://127.0.0.1:8081/Aaa

# 如果規(guī)則(后面跟/目錄符號(hào)) location /aaa/ { 則只能匹配到下面兩行:
http://127.0.0.1:8081/aaa/
http://127.0.0.1:8081/aaa/def/

如圖:

2,= 用于不包含正則表達(dá)式的uri前,必須與指定的模式精確匹配

實(shí)測(cè),等于號(hào)后面有或沒(méi)有空格不影響效果。location指令實(shí)例:

server {
    listen 8081;
    server_name 127.0.0.1;

# = : 用于不包含正則表達(dá)式的uri前,必須與指定的模式精確匹配(區(qū)分大小寫(xiě),并且后面帶/是有區(qū)別的)
   location = /bbb {
        default_type text/plain;
return 200 "access success bbb \n\r";
   }

}

# 能匹配到:
http://127.0.0.1:8081/bbb
http://127.0.0.1:8081/bbb?p1=TOM

# 不能匹配到(大小寫(xiě)區(qū)分):
http://127.0.0.1:8081/bbb/
http://127.0.0.1:8081/bbbcd
http://127.0.0.1:8081/Bbb

如圖:

3,包含正則表達(dá)式的

~ :用于表示當(dāng)前uri中包含了正則表達(dá)式,并且區(qū)分大小寫(xiě)
~*: 用于表示當(dāng)前uri中包含了正則表達(dá)式,并且不區(qū)分大小寫(xiě)
換句話說(shuō),如果uri包含了正則表達(dá)式,需要用上述兩個(gè)符合來(lái)標(biāo)識(shí)
^~: 用于不包含正則表達(dá)式的uri前,功能和不加符號(hào)的一致,唯一不同的是,如果模式匹配,那么就停止搜索其他模式了。(可用它提升優(yōu)先級(jí)

含正則表達(dá)式的location指令,實(shí)例一:

server {
    listen 8081;
    server_name 127.0.0.1;

# ~ :用于表示當(dāng)前uri中包含了正則表達(dá)式,并且區(qū)分大小寫(xiě)
# 正則表達(dá)式:區(qū)分大小寫(xiě),以/abc開(kāi)頭,以1個(gè)字母或數(shù)字或下劃線或漢字結(jié)束的
   location ~^/eee\w$ {
        default_type text/plain;
return 200 "access success. 000 Regular expression matched: eee  \n\r";
   }
}

# 能匹配到:
http://127.0.0.1:8081/eeeb
http://127.0.0.1:8081/eeeB
http://127.0.0.1:8081/eee2

# 不能匹配到(大小寫(xiě)區(qū)分):
http://127.0.0.1:8081/eee
http://127.0.0.1:8081/Eee
http://127.0.0.1:8081/eee/
http://127.0.0.1:8081/eeedef
http://127.0.0.1:8081/eee/def/
http://127.0.0.1:8081/eee?p1=TOM

如圖:

含正則表達(dá)式的location指令,實(shí)例二:

server {
    listen 8081;
    server_name 127.0.0.1;

# ~*: 用于表示當(dāng)前uri中包含了正則表達(dá)式,并且不區(qū)分大小寫(xiě)
# 正則表達(dá)式:不區(qū)分大小寫(xiě),以/abc開(kāi)頭,以字母或數(shù)字或下劃線或漢字結(jié)束的
   location ~*^/ddd\w$ {
        default_type text/plain;
return 200 "access success. 111 Regular expression matched: ddd  \n\r";
   }
}

# 能匹配到:
http://127.0.0.1:8081/dddb
http://127.0.0.1:8081/dddB
http://127.0.0.1:8081/ddd2
http://127.0.0.1:8081/DddH

# 不能匹配到(大小寫(xiě)區(qū)分):
http://127.0.0.1:8081/ddd
http://127.0.0.1:8081/Ddd
http://127.0.0.1:8081/ddd/
http://127.0.0.1:8081/ddddef
http://127.0.0.1:8081/ddd/def/
http://127.0.0.1:8081/ddd?p1=TOM

如圖:

不包含正則表達(dá)式的location指令,實(shí)例三:

server {
    listen 8081;
    server_name 127.0.0.1;

# ^~: 用于不包含正則表達(dá)式的uri前,功能和不加符號(hào)的一致,唯一不同的是,如果模式匹配,那么就停止搜索其他模式了,可用于提升優(yōu)先級(jí)。(區(qū)分大小寫(xiě),并且后面帶/是有區(qū)別的)
   location ^~ /fff {
        default_type text/plain;
return 200 "access success. Non Regular expression matched: fff  \n\r";
   }
}

# 能匹配到:
http://127.0.0.1:8081/fff
http://127.0.0.1:8081/fff/
http://127.0.0.1:8081/fffdef
http://127.0.0.1:8081/fff/def/
http://127.0.0.1:8081/fff?p1=TOM

# 不能匹配到(大小寫(xiě)區(qū)分):
http://127.0.0.1:8081/Fff
http://127.0.0.1:8081/pp/fff

# 如果規(guī)則(后面跟/目錄符號(hào)) location /fff/ { 則只能匹配到下面兩行:
http://127.0.0.1:8081/fff/
http://127.0.0.1:8081/fff/def/

如圖:

定義一個(gè)命名的 location

用"@" 定義一個(gè)命名的 location,使用在內(nèi)部定向時(shí),例如:error_page, try_files
@location 例子:

# 示例:404錯(cuò)誤頁(yè)將被內(nèi)部重定向
    error_page 404 = @fetch;
    location @fetch(
        proxy_pass http://fetch;
    )

# 類(lèi)似案例:
    error_page  404              /404.html;
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }


閱讀原文:原文鏈接


該文章在 2025/7/21 10:24:50 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved