nginx代理轉發(fā)報錯405?Method?Not?Allowed解決
背景
在使用nginx做代理web容器轉發(fā)的時候,根據url的前綴轉發(fā)到不同的服務,出現了接口報405的錯誤,網上查了好多文檔,說了好多種原因,經過排查定位,最終定位到的原因是請求的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的資料請關注腳本之家其它相關文章!
相關文章
Nginx利用Lua+Redis實現動態(tài)封禁IP的方法
在站點遇到攻擊且無明顯攻擊特征,造成站點訪問慢,nginx不斷返回502等錯誤時,可利用nginx+lua+redis對該IP進行封禁,這篇文章主要給大家介紹了關于Nginx利用Lua+Redis實現動態(tài)封禁IP的相關資料,需要的朋友可以參考下2018-12-12
Debian下搭建Nginx和Tomcat服務器實現負載均衡的方案
這篇文章主要介紹了Debian下搭建Nginx和Tomcat服務器實現負載均衡的方案,其主要思想依然是動靜分離并且以Nginx來進行反向代理這樣的路子,需要的朋友可以參考下2015-12-12

