如何避免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发送给后台的微服务,我的目的也就达到了。

posted @ 2019-03-12 13:50  废土王大锤  阅读(7166)  评论(0编辑  收藏  举报