nginx代理轉(zhuǎn)發(fā)報(bào)錯(cuò)405?Method?Not?Allowed解決
背景
在使用nginx做代理web容器轉(zhuǎn)發(fā)的時(shí)候,根據(jù)url的前綴轉(zhuǎn)發(fā)到不同的服務(wù),出現(xiàn)了接口報(bào)405的錯(cuò)誤,網(wǎng)上查了好多文檔,說了好多種原因,經(jīng)過排查定位,最終定位到的原因是請求的url地址不對,多了一個(gè)轉(zhuǎn)發(fā)的前綴。
解決
由于定位到了原因是請求的時(shí)候多了一個(gè)web容器/assetslog的上下文地址,如下圖
所以如果可以在轉(zhuǎn)發(fā)的時(shí)候,將這個(gè)前綴去掉,就可以正常訪問,比如:
a.com/user/user.html轉(zhuǎn)發(fā)到用戶服務(wù)b.com/user.html
a.com/order/order.html轉(zhuǎn)發(fā)到訂單服務(wù)b.com/order.html
即,url的前綴對下游的服務(wù)是不需要的,除非下游服務(wù)添加context-path, 但很多時(shí)候我們并不喜歡加這個(gè)。如果Nginx轉(zhuǎn)發(fā)的時(shí)候,把這個(gè)前綴去掉就好了。
方法1:proxy_pass后面加根路徑/
server { listen 80; server_name a.com; location ^~/user/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://user/; } location ^~/order/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://order/; } }
^~/user/表示匹配前綴是user的請求,proxy_pass的結(jié)尾有/, 則會(huì)把/user/*后面的路徑直接拼接到后面,即移除location上的規(guī)則 user和order
方法2:使用rewrite,注意到proxy_pass結(jié)尾沒有/, rewrite重寫了url
server { listen 80; server_name a.com; location ^~/user/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; rewrite ^/user/(.*)$ /$1 break; proxy_pass http://user; } location ^~/order/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; rewrite ^/order/(.*)$ /$1 break; proxy_pass http://order; } }
此外nginx還可以簡單的直接把請求原封不動(dòng)的轉(zhuǎn)發(fā)給下一個(gè)服務(wù)
比如,訪問a.com/app/a/b.html, 要求轉(zhuǎn)發(fā)到b.com/app/a/b.html
設(shè)置proxy_pass即可。請求只會(huì)替換域名
server { listen 80; server_name a.com; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://b.com; } }
以上就是解決nginx代理轉(zhuǎn)發(fā)報(bào)錯(cuò)405 Method Not Allowed的詳細(xì)內(nèi)容,更多關(guān)于解決nginx代理轉(zhuǎn)發(fā)報(bào)錯(cuò)405 Method Not Allowed的資料請關(guān)注腳本之家其它相關(guān)文章!
- Nginx配置四層、七層網(wǎng)絡(luò)代理轉(zhuǎn)發(fā)的方法示例
- nginx配置proxy_pass代理轉(zhuǎn)發(fā)時(shí)報(bào)404問題
- Nginx常用配置以及代理轉(zhuǎn)發(fā)操作詳解
- Nginx反向代理轉(zhuǎn)發(fā)tomcat的實(shí)現(xiàn)
- 通過Nginx代理轉(zhuǎn)發(fā)配置實(shí)現(xiàn)跨域的方法(API代理轉(zhuǎn)發(fā))
- Nginx 代理轉(zhuǎn)發(fā)阿里云OSS上傳的實(shí)現(xiàn)代碼
- 詳解Nginx 利用代理轉(zhuǎn)發(fā)請求示例
- nginx代理轉(zhuǎn)發(fā)配置小結(jié)
相關(guān)文章
Node.js站點(diǎn)使用Nginx作反向代理時(shí)配置GZip壓縮的教程
這篇文章主要介紹了Node.js站點(diǎn)使用Nginx作反向代理時(shí)配置GZip壓縮的教程,文中演示了Node使用Express框架時(shí)的HTTP傳輸壓縮配置,需要的朋友可以參考下2016-04-04Nginx中l(wèi)ocation匹配以及rewrite重寫跳轉(zhuǎn)詳解
訪問重寫 rewrite 是 Nginx HTTP 請求處理過程中的一個(gè)重要功能,下面這篇文章主要給大家介紹了Nginx中l(wèi)ocation匹配以及rewrite重寫跳轉(zhuǎn)的相關(guān)資料,需要的朋友可以參考下2022-03-03修改nginx服務(wù)器類型實(shí)現(xiàn)簡單偽裝(隱藏nginx類型與版本等)
這篇文章主要介紹了修改nginx服務(wù)器類型實(shí)現(xiàn)簡單偽裝(隱藏nginx類型與版本等),需要的朋友可以參考下2016-03-03nginx配置域名訪問時(shí)域名后出現(xiàn)兩個(gè)斜杠//的解決方法
最近這兩天重新寫了一下我的個(gè)人網(wǎng)站,在阿里云新買了一臺服務(wù)器,配置好以后出現(xiàn)了一個(gè)問題,就是輸入域名后域名地址會(huì)自動(dòng)在后面追加兩個(gè)斜桿,需要的朋友可以參考下2020-07-07Nginx代理MySQL實(shí)現(xiàn)通過域名連接數(shù)據(jù)庫的詳細(xì)教程
我們的生產(chǎn)環(huán)境基本上都部署在云服務(wù)器上,例如應(yīng)用服務(wù)器、MySQL服務(wù)器等,如果MySQL服務(wù)器直接暴露在公網(wǎng),就會(huì)存在很大的風(fēng)險(xiǎn),為了保證數(shù)據(jù)安全,MySQL服務(wù)器的端口是不對外開放的,所以本文介紹了Nginx代理MySQL實(shí)現(xiàn)通過域名連接數(shù)據(jù)庫的詳細(xì)教程2024-07-07對Nginx支持SSL的性能進(jìn)行優(yōu)化的方法
這篇文章主要介紹了對Nginx支持SSL的性能進(jìn)行優(yōu)化的方法,作者分別以不同方法進(jìn)行了8個(gè)優(yōu)化實(shí)驗(yàn),需要的朋友可以參考下2015-06-06nginx提示:500 Internal Server Error錯(cuò)誤的解決方法
本文章來給大家總結(jié)了大量關(guān)于導(dǎo)致nginx中提示500 Internal Server Error錯(cuò)誤的原因總結(jié)與解決方法分析有需要了解的朋友可參考參考2013-04-04