nginx代理轉發(fā)報錯405?Method?Not?Allowed解決
背景
在使用nginx做代理web容器轉發(fā)的時候,根據(jù)url的前綴轉發(fā)到不同的服務,出現(xiàn)了接口報405的錯誤,網(wǎng)上查了好多文檔,說了好多種原因,經(jīng)過排查定位,最終定位到的原因是請求的url地址不對,多了一個轉發(fā)的前綴。
解決
由于定位到了原因是請求的時候多了一個web容器/assetslog的上下文地址,如下圖
所以如果可以在轉發(fā)的時候,將這個前綴去掉,就可以正常訪問,比如:
a.com/user/user.html轉發(fā)到用戶服務b.com/user.html
a.com/order/order.html轉發(fā)到訂單服務b.com/order.html
即,url的前綴對下游的服務是不需要的,除非下游服務添加context-path, 但很多時候我們并不喜歡加這個。如果Nginx轉發(fā)的時候,把這個前綴去掉就好了。
方法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的結尾有/, 則會把/user/*后面的路徑直接拼接到后面,即移除location上的規(guī)則 user和order
方法2:使用rewrite,注意到proxy_pass結尾沒有/, 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還可以簡單的直接把請求原封不動的轉發(fā)給下一個服務
比如,訪問a.com/app/a/b.html, 要求轉發(fā)到b.com/app/a/b.html
設置proxy_pass即可。請求只會替換域名
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代理轉發(fā)報錯405 Method Not Allowed的詳細內容,更多關于解決nginx代理轉發(fā)報錯405 Method Not Allowed的資料請關注腳本之家其它相關文章!
相關文章
Node.js站點使用Nginx作反向代理時配置GZip壓縮的教程
這篇文章主要介紹了Node.js站點使用Nginx作反向代理時配置GZip壓縮的教程,文中演示了Node使用Express框架時的HTTP傳輸壓縮配置,需要的朋友可以參考下2016-04-04Nginx中l(wèi)ocation匹配以及rewrite重寫跳轉詳解
訪問重寫 rewrite 是 Nginx HTTP 請求處理過程中的一個重要功能,下面這篇文章主要給大家介紹了Nginx中l(wèi)ocation匹配以及rewrite重寫跳轉的相關資料,需要的朋友可以參考下2022-03-03修改nginx服務器類型實現(xiàn)簡單偽裝(隱藏nginx類型與版本等)
這篇文章主要介紹了修改nginx服務器類型實現(xiàn)簡單偽裝(隱藏nginx類型與版本等),需要的朋友可以參考下2016-03-03nginx配置域名訪問時域名后出現(xiàn)兩個斜杠//的解決方法
最近這兩天重新寫了一下我的個人網(wǎng)站,在阿里云新買了一臺服務器,配置好以后出現(xiàn)了一個問題,就是輸入域名后域名地址會自動在后面追加兩個斜桿,需要的朋友可以參考下2020-07-07Nginx代理MySQL實現(xiàn)通過域名連接數(shù)據(jù)庫的詳細教程
我們的生產環(huán)境基本上都部署在云服務器上,例如應用服務器、MySQL服務器等,如果MySQL服務器直接暴露在公網(wǎng),就會存在很大的風險,為了保證數(shù)據(jù)安全,MySQL服務器的端口是不對外開放的,所以本文介紹了Nginx代理MySQL實現(xiàn)通過域名連接數(shù)據(jù)庫的詳細教程2024-07-07nginx提示:500 Internal Server Error錯誤的解決方法
本文章來給大家總結了大量關于導致nginx中提示500 Internal Server Error錯誤的原因總結與解決方法分析有需要了解的朋友可參考參考2013-04-04