Nginx正则表达式之匹配操作符详解
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 / { |
#限制IE訪(fǎng)問(wèn)
如果把MSIE改成 Mozilla 就基本上把IE和firefox這樣pc瀏覽器限制了
2和3主要是針對(duì)盜鏈做處理
2:針對(duì)不同的文件類(lèi)型
可能這個(gè)指令是我們平時(shí)使用正則匹配用的最多的指令:
| ?代碼如下 | 復(fù)制代碼 |
|
|
3:針對(duì)不同的目錄
| ?代碼如下 | 復(fù)制代碼 |
| location /img/ { |
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)題。
- 上一篇: Linux 应用层的时间编程【转】
- 下一篇: CSS概念,引入,选择器