如何避免Nginx將url decode


靈感來自:https://my.oschina.net/jastme/blog/528541

這是最近玩微服務架構遇到的一個情況,因為Spring Boot 1.5的網關不支持websocket的轉發,所以我使用了Nginx作為最外層的網關,單獨轉發websocket(rest api還是走apigateway)。同時用Nginx部署靜態web客戶端。

但是隨着功能的擴展,我發現之前配置的Nginx在轉發帶有中文encode的url時,會將url decode,然后轉發給apigateway微服務,這時候spring框架會拋出400異常,無法識別url中的字符。

    location ~ ^/gate/(.*) {
        proxy_pass http://127.0.0.1:8081/$1;
    }

上面的配置時我之前的配置,Nginx會將gate/后的url decode后再拼接發送給apigateway。

后來受這個帖子(https://my.oschina.net/jastme/blog/528541)的啟發,將配置改為如下:

    location ~ ^/gate {
        if ($request_uri ~* ^/gate/(.*)$) {
            proxy_pass http://127.0.0.1:8081/$1;
        }
    }

這時,Nginx將不會decode url,直接將url發送給后台的微服務,我的目的也就達到了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM