hallwong

灵感来自:https://my.oschina.net/jastme/blog/528541

这是最近玩微服务架构遇到的一个情况,因为Spring Cloud 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发送给后台的微服务,我的目的也就达到了。

相关文章:

  • 2021-09-16
  • 2021-09-19
  • 2021-09-30
  • 2018-04-25
  • 2018-05-10
  • 2021-06-17
  • 2021-08-14
  • 2021-04-16
猜你喜欢
  • 2021-08-03
  • 2021-10-19
  • 2021-04-24
  • 2021-07-07
  • 2021-10-28
  • 2021-12-25
  • 2021-09-02
相关资源
相似解决方案