欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

nginx代理轉(zhuǎn)發(fā)報(bào)錯(cuò)405?Method?Not?Allowed解決

 更新時(shí)間:2023年08月25日 08:49:23   作者:fuGUI  
這篇文章主要為大家介紹了解決nginx代理轉(zhuǎn)發(fā)報(bào)錯(cuò)405?Method?Not?Allowed解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

背景

在使用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)文章!

相關(guān)文章

最新評論