日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Nginx >内容正文

Nginx

Nginx正则表达式之匹配操作符详解

發(fā)布時(shí)間:2025/4/5 Nginx 75 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nginx正则表达式之匹配操作符详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

Nginx正則表達(dá)式之匹配操作符詳解

nginx可以在配置文件中對(duì)某些內(nèi)置變量進(jìn)行判斷,從而實(shí)現(xiàn)某些功能。例如:防止rewrite、盜鏈、對(duì)靜態(tài)資源設(shè)置緩存以及瀏覽器限制等等。由于nginx配置中有if指令,但是沒(méi)有對(duì)應(yīng)else指令,所以判斷要分為匹配和不匹配。

字符串表達(dá)式支持正則表達(dá)式,能設(shè)定大小寫(xiě)是否敏感。因此共有四個(gè)操作符,

如下:

~???? 區(qū)分大小寫(xiě)(大小寫(xiě)敏感)匹配成功?
~*?? 不區(qū)分大小寫(xiě)匹配成功?
!~??? 區(qū)分大小寫(xiě)匹配失敗?
!~*? 不區(qū)分大小寫(xiě)匹配失敗


1: 限制某些類(lèi)型的客戶(hù)端的訪(fǎng)問(wèn)
if指令
所有的Nginx內(nèi)置變量都可以通過(guò)if指令和正則表達(dá)式來(lái)進(jìn)行匹配,并且根據(jù)匹配結(jié)果進(jìn)行一些操
?

?代碼如下復(fù)制代碼

location / {
if ($http_user_agent ~ MSIE) {
return 503;
}
}

#限制IE訪(fǎng)問(wèn)

如果把MSIE改成 Mozilla 就基本上把IE和firefox這樣pc瀏覽器限制了
2和3主要是針對(duì)盜鏈做處理
2:針對(duì)不同的文件類(lèi)型

可能這個(gè)指令是我們平時(shí)使用正則匹配用的最多的指令:

?代碼如下復(fù)制代碼


location ~ .*.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {
???? if ($http_referer ~* javagg.com) {
???? #rewrite ^/ http://www.javagg.com/403.html;
???? return 403;
????? }
}

3:針對(duì)不同的目錄

?代碼如下復(fù)制代碼

location /img/ {
??? root /data/img/;
?? if ($http_referer ~* javagg.com) {
???????????? rewrite? ^/? http://www.admin99.net/images/error.gif
???????????? #return?? 403;
??? }
}

1.^~ 標(biāo)識(shí)符后面跟一個(gè)字符串。

Nginx將在這個(gè)字符串匹配后停止進(jìn)行正則表達(dá)式的匹配(location指令中正則表達(dá)式的匹配的結(jié)果優(yōu)先使用),如:location ^~ /images/,你希望對(duì)/images/這個(gè)目錄進(jìn)行一些特別的操作,如增加expires頭,防盜鏈等,但是你又想把除了這個(gè)目錄的圖片外的所有圖片只進(jìn)行增加expires頭的操作,這個(gè)操作可能會(huì)用到另外一個(gè)location,例如:location ~* .(gif|jpg|jpeg)$,這樣,如果有請(qǐng)求/images/1.jpg,nginx如何決定去進(jìn)行哪個(gè)location中的操作呢?結(jié)果取決于標(biāo)識(shí)符^~,如果你這樣寫(xiě):location /images/,這樣nginx會(huì)將1.jpg匹配到location ~* .(gif|jpg|jpeg)$這個(gè)location中,這并不是你需要的結(jié)果,而增加了^~這個(gè)標(biāo)識(shí)符后,它在匹配了/images/這個(gè)字符串后就停止搜索其它帶正則的location。

2.= 表示精確的查找地址,

如location = /它只會(huì)匹配uri為/的請(qǐng)求,如果請(qǐng)求為/index.html,將查找另外的location,而不會(huì)匹配這個(gè),當(dāng)然可以寫(xiě)兩個(gè)location,location = /和location /,這樣/index.html將匹配到后者,如果你的站點(diǎn)對(duì)/的請(qǐng)求量較大,可以使用這個(gè)方法來(lái)加快請(qǐng)求的響應(yīng)速度。


3.@ 表示為一個(gè)location進(jìn)行命名,即自定義一個(gè)location,這個(gè)location不能被外界所訪(fǎng)問(wèn),只能用于Nginx產(chǎn)生的子請(qǐng)求,主要為error_page和try_files。
注意,這3個(gè)標(biāo)識(shí)符后面不能跟正則表達(dá)式,雖然配置文件檢查會(huì)通過(guò),而且沒(méi)有任何警告,但是他們并不會(huì)進(jìn)行匹配。
綜上所述,location指令對(duì)于后面值的匹配順序?yàn)?#xff1a;

1.標(biāo)識(shí)符“=”的location會(huì)最先進(jìn)行匹配,如果請(qǐng)求uri匹配這個(gè)location,將對(duì)請(qǐng)求使用這個(gè)location的配置。
2.進(jìn)行字符串匹配,如果匹配到的location有^~這個(gè)標(biāo)識(shí)符,匹配停止返回這個(gè)location的配置。
3.按照配置文件中定義的順序進(jìn)行正則表達(dá)式匹配。最早匹配的location將返回里面的配置。
4.如果正則表達(dá)式能夠匹配到請(qǐng)求的uri,將使用這個(gè)正則對(duì)應(yīng)的location,如果沒(méi)有,則使用第二條匹配的結(jié)果。

轉(zhuǎn)載于:https://my.oschina.net/u/3367404/blog/2936534

總結(jié)

以上是生活随笔為你收集整理的Nginx正则表达式之匹配操作符详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。