nginx proxy_pass 路徑拼接的具體實(shí)現(xiàn)
前言
主要是記錄proxy_pass在做轉(zhuǎn)發(fā)時(shí),轉(zhuǎn)發(fā)的url生成規(guī)則,本文以通用字符串匹配為例,就是類似如下
location /aaa {
proxy_pass ...
}正則及精準(zhǔn)匹配放到下篇說
正文
對(duì)于訪問后端路徑的拼接,proxy_pass可以分為兩種,一種是攜帶URI(或者說是某個(gè)uri的一部分),一種是不帶uri(或者說僅有協(xié)議 + host)
例如 http://localhost:80 就是不帶uri的地址
例如 http://localhost:80/ 和 http://localhost:80/aaa 就是攜帶URI的地址
以下案例全部是假設(shè) nginx設(shè)置server 為example.com,即
http {
server {
listen 8080;
server_name example.com;
}
}不帶uri
這種比較好說,訪問nginx的URI直接拼接到proxy_pass的后面就可以了,舉例如下
location /aaa {
proxy_pass http://localhost
}location /aaa/ {
proxy_pass http://localhost
}1、對(duì)于上面兩種寫法,訪問nginx的URL為 http://example.com:8080/aaa/xxx,nginx轉(zhuǎn)發(fā)的地址將是 http://localhost/aaa/xxx
2、但是對(duì)于http://example.com:8080/aaa就會(huì)有所不同,如果只有l(wèi)ocation /aaa/ , 那么http://example.com:8080/aaa會(huì)被重定向?yàn)閔ttp://example.com:8080/aaa/
帶uri
這種就是,將原URL的URI匹配到的location后面的內(nèi)容去掉,再拼接到proxy_pass后,常見案例如下
第一種
location /aaa {
proxy_pass http://localhost/
}訪問 http://example.com:8080/aaa/xxx ,nginx將轉(zhuǎn)發(fā)到 http://localhost//xxx
解析就是 /aaa/xxx 去掉 /aaa 剩下了 /xxx,拼接到http://localhost/ 后面 成了 http://localhost//xxx
這種寫法不對(duì),多了一個(gè)/,但是我用來測(cè)試的nginx1.25.1沒有問題,依然轉(zhuǎn)發(fā)到正確的 http://localhost/xxx,但是不建議搞這種特立獨(dú)行的
第二種
location /aaa/ {
proxy_pass http://localhost/
}訪問 http://example.com:8080/aaa/xxx ,nginx將轉(zhuǎn)發(fā)到 http://localhost/xxx
解析就是 /aaa/xxx 去掉 /aaa/ 剩下了 xxx,拼接到http://localhost/ 后面 成了 http://localhost/xxx
第三種
location /aaa/ {
proxy_pass http://localhost/ccc
}訪問 http://example.com:8080/aaa/xxx ,nginx將轉(zhuǎn)發(fā)到 http://localhost/cccxxx
解析就是 /aaa/xxx 去掉 /aaa/ 剩下了 xxx,拼接到http://localhost/ccc 后面 成了 http://localhost/cccxxx
這一眼看過去就是個(gè)錯(cuò)誤
第四種
location /aaa {
proxy_pass http://localhost/ccc
}訪問 http://example.com:8080/aaa/xxx ,nginx將轉(zhuǎn)發(fā)到 http://localhost/ccc/xxx
解析就是 /aaa/xxx 去掉 /aaa 剩下了 /xxx,拼接到http://localhost/ccc 后面 成了 http://localhost/ccc/xxx
第五種
location /aaa/ {
proxy_pass http://localhost/ccc/
}訪問 http://example.com:8080/aaa/xxx ,nginx將轉(zhuǎn)發(fā)到 http://localhost/ccc/xxx
解析就是 /aaa/xxx 去掉 /aaa/ 剩下了 xxx,拼接到http://localhost/ccc/ 后面 成了 http://localhost/ccc/xxx
第六種
location /aaa {
proxy_pass http://localhost/ccc/
}訪問 http://example.com:8080/aaa/xxx ,nginx將轉(zhuǎn)發(fā)到 http://localhost/ccc//xxx
解析就是 /aaa/xxx 去掉 /aaa 剩下了 /xxx,拼接到http://localhost/ccc/ 后面 成了 http://localhost/ccc//xxx
這種也是非正常的拼接,但是大多數(shù)瀏覽器、中間件都能支持,不建議這么做
總結(jié)
1、proxy_pass后面不帶uri的話,原URL的URI直接拼接proxy_pass就得出訪問的后端地址
2、對(duì)于帶uri的proxy_pass,將原URL的URI匹配到的location后面的內(nèi)容去掉,再拼接到proxy_pass后
3、建議location 和 proxy_pass的結(jié)尾要么都帶 / ,要么都不帶/,否則會(huì)出現(xiàn)案例1、3、6的情況
到此這篇關(guān)于nginx proxy_pass 路徑拼接的具體實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)nginx proxy_pass 路徑拼接內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Nginx的proxy_pass命令使用
- Nginx 反向代理配置避坑指南(proxy_pass 斜杠、502排查、CORS、文件上傳)
- Nginx中proxy_pass末尾帶斜杠/和不帶的區(qū)別
- nginx配置之proxy_pass示例詳解
- 詳解nginx?中l(wèi)ocation和?proxy_pass的匹配規(guī)則
- Nginx中proxy_pass使用小結(jié)
- Nginx中l(wèi)ocation proxy_pass加與不加/的區(qū)別說明
- Nginx?location和proxy_pass配置示例詳解
- Nginx中proxy_pass的斜杠的兩種方式
- Nginx rewrite和proxy_pass的區(qū)別及說明
- Nginx中proxy_pass指令斜杠的作用及說明
- Nginx proxy_pass如何到https后端
- nginx代理參數(shù)proxy_pass的實(shí)現(xiàn)
相關(guān)文章
深入理解Nginx中Server和Location的匹配邏輯
這篇文章主要介紹了深入理解Nginx中Server和Location的匹配邏輯,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03
配置Nginx實(shí)現(xiàn)訪問本地靜態(tài)資源的完整指南
Nginx 是一個(gè)高性能的 HTTP 服務(wù)器和反向代理服務(wù)器,廣泛用于靜態(tài)資源的托管和負(fù)載均衡,在開發(fā)和生產(chǎn)環(huán)境中,我們常常需要使用 Nginx 來提供本地靜態(tài)資源的訪問,本文將詳細(xì)介紹如何配置 Nginx 以便訪問本地靜態(tài)資源,需要的朋友可以參考下2024-08-08
詳解ngx_cache_purge _proxy_cache指令使用
本文主要介紹了詳解ngx_cache_purge _proxy_cache指令使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
angular6+springboot實(shí)現(xiàn)前后分離nginx配置
這篇文章主要介紹了angular6+springboot實(shí)現(xiàn)前后分離nginx配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Nginx 域名轉(zhuǎn)發(fā)的實(shí)現(xiàn)
這篇文章主要介紹了Nginx 域名轉(zhuǎn)發(fā)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
NGINX中瀏覽器的盜鏈與防止被盜的實(shí)現(xiàn)
本文介紹在局域網(wǎng)內(nèi)實(shí)現(xiàn)盜鏈與防盜鏈的配置方法,通過Nginx設(shè)置valid_referers限制資源訪問來源,非法引用返回403禁止訪問,感興趣的可以了解一下2025-07-07

