0. 引言
咱們上節(jié)講解了nginx的負(fù)載均衡配置,但是還有很多其他的轉(zhuǎn)發(fā)情況,包括不同路徑轉(zhuǎn)發(fā)至不同的業(yè)務(wù)服務(wù),通配符識別路徑轉(zhuǎn)發(fā)等。
今天一起來學(xué)習(xí)nginx的轉(zhuǎn)發(fā)配置
1. location模塊的匹配模式
首先我們要了解nginx進(jìn)行轉(zhuǎn)發(fā)代理的核心在于兩處,一是入口,二是出口;入口就是url路徑匹配識別對應(yīng)的路徑,出口就是轉(zhuǎn)發(fā)映射對應(yīng)的后臺服務(wù)地址
我們的入口路徑匹配識別都是在location
模塊實(shí)現(xiàn)的,所以我們要首先認(rèn)識location支持的匹配模式。
所謂匹配模式,就是根據(jù)什么樣的路徑進(jìn)行匹配,比如識別到路徑以“/user”開頭的,則轉(zhuǎn)發(fā)至user-server服務(wù),那么“/user”就是我們的匹配路徑
location支持2種匹配模式:精確匹配(普通匹配)和模糊匹配(正則匹配),總共以下幾種呈現(xiàn)形式:
- 1、全路徑精確匹配 =
進(jìn)行uri的全路徑精確匹配,要匹配的一模一樣的uri
比如 location = /index ,那么只有路徑為/index的才會匹配到
- 2、前綴模糊匹配 ^~
進(jìn)行uri的前綴精確匹配
比如 location ^~ /user/ ,那么只要是路徑以/user/開頭的都會匹配到
- 3、無匹配符號的精確匹配
沒有符號,按照路徑開頭精確匹配,但是匹配到后不會立即返回,還會繼續(xù)匹配其他普通匹配,如果匹配到,則會舍棄之前匹配的路徑
比如 location /user/ , 當(dāng)訪問/user/開頭時會匹配到
比如 location /user/admin,當(dāng)訪問/user/admin時會匹配到
- 4、模糊匹配 ~
進(jìn)行uri的模糊匹配,區(qū)分大小寫,匹配到后不再進(jìn)行其他匹配
比如 location ~ /user/ ,當(dāng)路徑包含/user/時會匹配,比如/admin/user/或者/user/admin/
當(dāng)然也可以用正則表達(dá)式來表示匹配路徑:
比如 location ~ ^/user(.*)admin$,能夠匹配以/user開頭,admin結(jié)尾的路徑,.*
表示的是任意字符
這里我們簡單測試一下,配置后我們訪問192.168.244.41/user/xxx/admin
,發(fā)現(xiàn)是可以正常轉(zhuǎn)發(fā)至后臺的tomcat服務(wù)的,只是tomcat服務(wù)中沒有/user地址的接口,所以返回404
我們繼續(xù)訪問192.168.244.41/user/xxx
,發(fā)現(xiàn)報的就是nginx的404了,這說明請求并沒有轉(zhuǎn)發(fā)到后臺tomcat中,說明沒有命中匹配。
- 5、模糊匹配 ~*
進(jìn)行uri的模糊匹配,不區(qū)分大小寫,匹配到后不再進(jìn)行其他匹配,優(yōu)先級與~相同,按照先后順序優(yōu)先
比如 location ~ /USER/,當(dāng)路徑包含/USER/時會匹配,如果是/user/則不會,因?yàn)閰^(qū)分大小寫了
優(yōu)先級:
由高到低:=
> ^~
> 其他,其他匹配根據(jù)先后順序,配置在前的越優(yōu)先
2. proxy_pass配置詳解
我們上述講解了匹配模式的書寫,匹配到了還要進(jìn)行合理的轉(zhuǎn)發(fā),而轉(zhuǎn)發(fā)模式的控制就是通過proxy_pass
, 下面我們來看看proxy_pass的語法結(jié)構(gòu)
2.1 proxy_pass 的四種配置寫法
首先我們來回顧下proxy_pass的語法:
proxy_pass url;
轉(zhuǎn)發(fā)地址url分為帶/
和不帶/
,帶杠的為絕對根路徑,會直接在路徑后拼接上不帶匹配路徑的轉(zhuǎn)發(fā)地址;如果沒有杠表示相對路徑,則會將匹配路徑也帶上進(jìn)行轉(zhuǎn)發(fā),我們舉例說明:
location /user/ {
proxy_pass url;
}
訪問路徑固定為:http://192.168.244.21/user/index.html
- 1、當(dāng)
proxy_pass http://192.168.244.21:8080/
時
會跳轉(zhuǎn)至http://192.168.244.21:8080/index.html,帶
/
表示絕對路徑,匹配路徑/user/會被消除
- 2、當(dāng)
proxy_pass http://192.168.244.21:8080
時
會跳轉(zhuǎn)至http://192.168.244.21:8080/user/index.html,相對路徑,匹配路徑/user/不會被消除
- 3、當(dāng)
proxy_pass http://192.168.244.21:8080/admin/
時
會跳轉(zhuǎn)至http://192.168.244.21:8080/admin/index.html,匹配路徑/user/被消除,并且保留轉(zhuǎn)發(fā)路徑里的/admin/
- 4、當(dāng)
proxy_pass http://192.168.244.21:8080/admin
時
會跳轉(zhuǎn)至http://192.168.244.21:8080/adminindex.html,因?yàn)閜roxy_pass中也包含了
/
了,表示絕對路徑,所以/user/會被消除
總言之記住一點(diǎn),帶/
表示絕對路徑,請求路徑中的匹配路徑(location)轉(zhuǎn)發(fā)時會被消除
2.2 server和location模塊中proxy_pass的區(qū)別
在server模塊中的proxy_pass只需要配置ip(或域名)和端口,相當(dāng)于端口轉(zhuǎn)發(fā);而在location中的proxy_pass,也就是我們更加常用的,可以配置域名、ip、端口、uri,此外還需要提供協(xié)議:http或https,相當(dāng)于地址轉(zhuǎn)發(fā)。
配置語法如下:
server {
listen 80;
proxy_responses 1;
proxy_timeout 20s;
proxy_pass xxx.com:8080;
# proxy_pass 192.168.244.21:8080;
location /user/ {
proxy_pass http://192.168.244.21:8081;
}
}
3. location匹配案例練習(xí)
- 1、匹配匹配以
.jsp
結(jié)尾的路徑,將其轉(zhuǎn)發(fā)至端口為8080的tomcat服務(wù)
解析:要匹配以.jsp
結(jié)尾,只需要默認(rèn)寫上.jsp
即可,但是需要注意.
是單一字符通配符,所以要添加\
做轉(zhuǎn)義,才能表示成本身點(diǎn)的含義
server {
listen 81;
location ~ (.*)\.jsp {
proxy_pass http://localhost:8080;
proxy_set_header HOST $host;
proxy_http_version 1.1;
}
}
測試:
訪問ip:81/index.jsp
,可以看到成功轉(zhuǎn)發(fā)到8080端口的tomcat了(這里提前修改了首頁,將端口顯示在tomcat首頁了)
去除點(diǎn)號訪問,發(fā)現(xiàn)訪問不通了,測試通過
- 2、三臺不同的tomcat,端口分別為8080,8081,8083,分別承擔(dān)不同的業(yè)務(wù),將路徑以/user開頭的請求轉(zhuǎn)發(fā)至tomcat 8080, 以/order開頭的轉(zhuǎn)發(fā)至tomcat 8081, 路徑包含/product跳轉(zhuǎn)到tomcat 8083的首頁
解析:
該需求實(shí)際上一共有兩部分,/user,/order的配置都類似,我們使用^~
即可,只有8083的需要用到的是跳轉(zhuǎn),也就是重定向到tomcat 8083首頁,這里需要用到return
,大家暫時知道即可,下一章我們詳細(xì)講解重定向的配置。
server {
listen 81;
location ^~ /user {
proxy_pass http://localhost:8080/;
proxy_set_header HOST $host;
proxy_http_version 1.1;
}
location ^~ /order {
proxy_pass http://localhost:8081/;
proxy_set_header HOST $host;
proxy_http_version 1.1;
}
location ~* /product {
return http://192.168.244.41:8083/index.jsp;
}
}
測試:
1、訪問/order/index.jsp
, /user/index.jsp
都成功轉(zhuǎn)發(fā)對應(yīng)服務(wù)
2、訪問/product/xxx
,也成功跳轉(zhuǎn)到tomcat 8083首頁了,測試通過。
4. 總結(jié)
上述案例我們講解到了需要重定向跳轉(zhuǎn)的問題,上述案例中可以看到我們重定向后地址欄的地址也發(fā)生了變化,這實(shí)際上也暴露了一些后臺服務(wù)的地址信息,如果我們想地址不變化,內(nèi)容進(jìn)行轉(zhuǎn)發(fā)即可,要怎么實(shí)現(xiàn)呢?文章來源:http://www.zghlxwxcb.cn/news/detail-806780.html
這就需要詳細(xì)學(xué)習(xí)nginx 重定向的內(nèi)容,下一章我們將針對這塊內(nèi)容繼續(xù)攻克。文章來源地址http://www.zghlxwxcb.cn/news/detail-806780.html
到了這里,關(guān)于Nginx快速入門:nginx各類轉(zhuǎn)發(fā)、代理配置詳解|location、proxy_pass參數(shù)詳解(五)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!