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