做空氣開(kāi)關(guān)那個(gè)網(wǎng)站推廣比較好百度廣告聯(lián)盟app
1、nginx常用的正則表達(dá)式
- ^ :匹配輸入字符串的起始位置
- $ :匹配輸入字符串的結(jié)束位置
*
:匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”+
:匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”- ? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
.
:匹配除“\n”之外的任何單個(gè)字符,若要匹配包括“\n”在內(nèi)的任意字符,請(qǐng)使用諸如“[.\n]”之類的模式- \ :將后面接著的字符標(biāo)記為一個(gè)特殊字符或一個(gè)原義字符或一個(gè)向后引用。如“\n”匹配一個(gè)換行符,而“$”則匹配“$”
- \d :匹配純數(shù)字[0-9] \s :空白符 \w :任意單詞字符包括下劃線[A-Za-z0-9_]
- {n} :重復(fù) n 次
- {n,} :重復(fù) n 次或更多次
- {n,m} :重復(fù) n 到 m 次
- [] :定義匹配的字符范圍
- [c] :匹配單個(gè)字符 c
- [a-z] :匹配 a-z 小寫(xiě)字母的任意一個(gè)
- [a-zA-Z0-9] :匹配所有大小寫(xiě)字母或數(shù)字
- () :表達(dá)式的開(kāi)始和結(jié)束位置
- | :或運(yùn)算符
2、location
1、location匹配的分類:
1)、精準(zhǔn)匹配:location = /test {…}
*
完整的路徑(必須有test ),一個(gè)字都不能少,也不能錯(cuò)
2)、一般匹配:location / {…}
*
location = / {…}–所有
*
location = /test {…}–包含test
3)、正則匹配:location ~ / {…}
*
location ^~:前綴匹配,以什么為開(kāi)頭
*
location ~:區(qū)分大小寫(xiě)進(jìn)行匹配
*
location ~:不區(qū)分大小寫(xiě)
*
location !~:區(qū)分大小寫(xiě),取反匹配
*
location !~:不區(qū)分大小寫(xiě),取反匹配
location 常用的匹配規(guī)則
- = :進(jìn)行普通字符精確匹配,也就是完全匹配。
- ^~ :表示普通字符匹配。使用前綴匹配。如果匹配成功,則不再匹配其它 正則匹配location。
- ~ :區(qū)分大小寫(xiě)的匹配。
- ~* :不區(qū)分大小寫(xiě)的匹配。
- !~ :區(qū)分大小寫(xiě)的匹配取非。
- !~* :不區(qū)分大小寫(xiě)的匹配取非。
location匹配一旦匹配成功
,不再向下繼續(xù)匹配
優(yōu)先級(jí):
首先精確匹配 =
其次前綴匹配 ^~
其次是按文件中順序的正則匹配 或*
然后匹配不帶任何修飾符的一般前綴匹配
最后是交給 / 通用匹配
精確匹配——正則匹配——一般匹配
完整的優(yōu)先級(jí)
:面試題
(location = 完整路徑) > (location ^~ 路徑) > (location
~,~*
正則順序) > (location /部分前綴路徑) > (location /)
首先看 優(yōu)先級(jí):精確= > 前綴^~ > 正則,* > 一般 > 通用/
在沒(méi)有精確匹配的時(shí)候,先看所有前綴的長(zhǎng)度,取最長(zhǎng)匹配的location;
如果最長(zhǎng)的前綴匹配是帶有~~的,則匹配,直接使用^~
的location匹配用戶的訪問(wèn)路徑并跳轉(zhuǎn)頁(yè)面;如果最長(zhǎng)的前綴匹配是不帶^~的,則會(huì)繼續(xù)看其它的正則匹配
前綴匹配看長(zhǎng)度,最長(zhǎng)的優(yōu)先匹配;正則匹配看上下順序,根據(jù)配置文件的配置由上往下依次匹配,匹配到即停止
2、案例
案例1
1)location = / {}
- =為精確匹配 / ,主機(jī)名后面不能帶任何字符串,比如訪問(wèn) / 和 /data,則 / 匹配,/data 不匹配
再比如 location = /abc,則只匹配/abc ,/abc/或 /abcd不匹配。若 location /abc,則即匹配/abc 、/abcd/ 同時(shí)也匹配 /abc/。
2)location / {}
- 因?yàn)樗械牡刂范家?/ 開(kāi)頭,所以這條規(guī)則將匹配到所有請(qǐng)求 比如訪問(wèn) / 和 /data, 則 / 匹配, /data 也匹配,
但后面前綴路徑會(huì)和最長(zhǎng)字符串優(yōu)先匹配(最長(zhǎng)匹配)
3)location /documents/ {}
- 匹配任何以 /documents/ 開(kāi)頭的地址,匹配符合以后,還要繼續(xù)往下搜索其它 location
只有其它 location后面的前綴路徑?jīng)]有匹配到時(shí),才會(huì)采用這一條
4)location /documents/abc {}
- 匹配任何以 /documents/abc 開(kāi)頭的地址,匹配符合以后,還要繼續(xù)往下搜索其它 location
只有其它 location后面的前綴路徑?jīng)]有匹配到時(shí),才會(huì)采用這一條
5)location ^~ /images/ {}
- 匹配任何以 /images/ 開(kāi)頭的地址,匹配符合以后,停止往下搜索正則,采用這一條
6)location ~* .(gif|jpg|jpeg)$ {}
**重要**
- 匹配所有以 gif、jpg或jpeg 結(jié)尾的請(qǐng)求
然而,所有請(qǐng)求/images/
(資源文件路徑
,項(xiàng)目打包后index.html文件內(nèi)查看 關(guān)聯(lián)路徑,可修改
(Reac
t:修改package.json
文件內(nèi)的homepage
:可更改路徑
))下的圖片會(huì)被 location ^~ /images/ 處理,因?yàn)?^~ 的優(yōu)先級(jí)更高,所以到達(dá)不了這一條正則
7)location /images/abc {}
- 最長(zhǎng)字符匹配到 /images/abc,優(yōu)先級(jí)最低,繼續(xù)往下搜索其它 location,會(huì)發(fā)現(xiàn) ^~ 和 ~ 存在
8)location ~ /images/abc {}
- 匹配以/images/abc 開(kāi)頭的,優(yōu)先級(jí)次之,只有去掉 location ^~ /images/ 才會(huì)采用這一條
9)location /images/abc/1.html {}
- 匹配/images/abc/1.html 文件,如果和正則location ~ /images/abc/1.html 相比,正則優(yōu)先級(jí)更高
案例2,有如下匹配規(guī)則:
location = / { #規(guī)則A (訪問(wèn)網(wǎng)站根目錄才會(huì)走這比如http://localhost/) =開(kāi)頭表示精確匹配
}
location = /login { #規(guī)則B(http://localhost/login)
}
location ^~ /static/ { #規(guī)則C (http://localhost/static/a.html) ^~開(kāi)頭表示以常規(guī)字符串開(kāi)頭的url路徑
}
location ~ \.(gif|jpg|png|js|css)$ { #規(guī)則D (訪問(wèn) http://localhost/a.gif, http://localhost/b.jpg 將匹配規(guī)則D和規(guī)則E,但是規(guī)則D順序優(yōu)先,規(guī)則E不起作用,而 http://localhost/static/c.png 則優(yōu)先匹配到 規(guī)則C) ~開(kāi)頭表示區(qū)分大小寫(xiě)的匹配
}
location ~* \.png$ { #規(guī)則E (訪問(wèn) http://localhost/a.PNG 則匹配規(guī)則E, 而不會(huì)匹配規(guī)則D,因?yàn)橐?guī)則E不區(qū)分大小寫(xiě)) ~*開(kāi)頭表示不區(qū)分大小寫(xiě)的正則匹配
}
location !~ \.xhtml$ { #規(guī)則F !~開(kāi)頭表示區(qū)分大小寫(xiě)的不匹配
}
location !~* \.xhtml$ { #規(guī)則G !~*開(kāi)頭表示不區(qū)分大小寫(xiě)的不匹配
}
location / { #規(guī)則H (http://localhost/register)
}
訪問(wèn) http://localhost/a.xhtml
不會(huì)匹配規(guī)則F和規(guī)則G,http://localhost/a.XHTML不會(huì)匹配規(guī)則G,因?yàn)椴粎^(qū)分大小寫(xiě)。規(guī)則F,規(guī)則G屬于排除法,符合匹配規(guī)則但是不會(huì)匹配到,所以想想看實(shí)際應(yīng)用中哪里會(huì)用到
。
訪問(wèn) http://localhost/category/id/1111
則最終匹配到規(guī)則H,因?yàn)橐陨弦?guī)則都不匹配,這個(gè)時(shí)候應(yīng)該是nginx轉(zhuǎn)發(fā)請(qǐng)求給后端應(yīng)用服務(wù)器,比如FastCGI(php),tomcat(jsp),nginx作為方向代理服務(wù)器存在。
那么產(chǎn)生的效果如下:
訪問(wèn)根目錄/, 比如http://localhost/
將匹配規(guī)則A
訪問(wèn) http://localhost/login
將匹配規(guī)則B,http://localhost/register 則匹配規(guī)則H
訪問(wèn) http://localhost/static/a.html
將匹配規(guī)則C
訪問(wèn) http://localhost/a.gif, http://localhost/b.jpg
將匹配規(guī)則D和規(guī)則E,但是規(guī)則D順序優(yōu)先,規(guī)則E不起作用,而 http://localhost/static/c.png
則優(yōu)先匹配到 規(guī)則C
訪問(wèn)http://localhost/a.PNG
則匹配規(guī)則E, 而不會(huì)匹配規(guī)則D,因?yàn)橐?guī)則E不區(qū)分大小寫(xiě)。
訪問(wèn) http://localhost/a.xhtml
不會(huì)匹配規(guī)則F和規(guī)則G,http://localhost/a.XHTML不會(huì)匹配規(guī)則G,因?yàn)椴粎^(qū)分大小寫(xiě)。規(guī)則F,規(guī)則G屬于排除法,符合匹配規(guī)則但是不會(huì)匹配到,所以想想看實(shí)際應(yīng)用中哪里會(huì)用到。
訪問(wèn)http://localhost/category/id/1111
則最終匹配到規(guī)則H,因?yàn)橐陨弦?guī)則都不匹配,這個(gè)時(shí)候應(yīng)該是nginx轉(zhuǎn)發(fā)請(qǐng)求給后端應(yīng)用服務(wù)器,比如FastCGI(php),tomcat(jsp),nginx作為方向代理服務(wù)器存在。
所以實(shí)際使用中,通常至少有三個(gè)匹配規(guī)則定義,如下:
#直接匹配網(wǎng)站根,通過(guò)域名訪問(wèn)網(wǎng)站首頁(yè)比較頻繁,使用這個(gè)會(huì)加速處理,官網(wǎng)如是說(shuō)。
#這里是直接轉(zhuǎn)發(fā)給后端應(yīng)用服務(wù)器了,也可以是一個(gè)靜態(tài)首頁(yè)
# 第一個(gè)必選規(guī)則
location = / { proxy_pass http://tomcat:8080/index
} # 第二個(gè)必選規(guī)則是處理靜態(tài)文件請(qǐng)求,這是nginx作為http服務(wù)器的強(qiáng)項(xiàng)
# 有兩種配置模式,目錄匹配或后綴匹配,任選其一或搭配使用
location ^~ /static/ { root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { root /webroot/res/;
} #第三個(gè)規(guī)則就是通用規(guī)則,用來(lái)轉(zhuǎn)發(fā)動(dòng)態(tài)請(qǐng)求到后端應(yīng)用服務(wù)器
#非靜態(tài)文件請(qǐng)求就默認(rèn)是動(dòng)態(tài)請(qǐng)求,自己根據(jù)實(shí)際把握
#畢竟目前的一些框架的流行,帶.php,.jsp后綴的情況很少了
location / { proxy_pass http://tomcat:8080/
3、(nginx的重定向) ReWrite語(yǔ)法
案例文件的最下面
案例1
案例2
案例3
重要
1、項(xiàng)目地址匹配了(資源文件
需要查看,能否匹配)
方法:
對(duì)應(yīng)不同的應(yīng)用–(nginx:一個(gè)端口
對(duì)應(yīng)不同
應(yīng)用判斷
)
location ^~ /images/ {}
location ~* .(gif|jpg|jpeg)$ {}
- 匹配所有以 gif、jpg或jpeg 結(jié)尾的請(qǐng)求
然而,所有請(qǐng)求/images/
(資源文件路徑
,項(xiàng)目打包后index.html文件內(nèi)查看 關(guān)聯(lián)路徑,可修改
(Reac
t:修改package.json
文件內(nèi)的homepage
:可更改路徑
))下的圖片會(huì)被 location ^~ /images/ 處理,因?yàn)?^~ 的優(yōu)先級(jí)更高,所以到達(dá)不了這一條正則