在Nginx做代理时Websocket升级头的问题



我有3个scalaakka-http应用程序,它们在ubuntu机器中使用不同的端口绑定到localhost。我想用相同的端口号访问所有的应用程序。所以我使用nginx来代理请求,并在内部重定向到所需的端口号。一切都像预期的那样顺利。现在,在每个应用程序中,我都有使用akka-http构建的内置websocket。所有的websocket请求将具有url…/ws/…如:

App-1(HR) 
  Url => http://192.168.1.50:90/hr/ ....  nginx resolve to localhost:8181
  web socket url => http://192.168.1.50:90/hr/ws/...
App-2(Common) 
  Url => http://192.168.1.50:90/common/... nginx resolve to localhost:8182
  web socket url => http://192.168.1.50:90/common/ws/... 
App-3(accounts) 
  Url => http://192.168.1.50/accounts/.. nginx resolve to localhost:8183
  web socket url => http://192.168.1.50:90/accounts/ws/...

Websocket在我的机器上工作得很好,但是当我部署到ubuntu服务器时,它在Websocket中给出错误。在检查日志后,我发现了原因,当nginx代理完成时,它不会携带Upgrade标头。因此,我在nginx配置文件中为location元素做了以下更改:

location /common {
                location /common/global {
                        proxy_pass http://127.0.0.1:8182/common/ws;
                        proxy_http_version 1.1;
                        proxy_set_header Upgrade $http_upgrade;
                        proxy_set_header Connection "upgrade";
                }
                location /common {
                        proxy_pass http://127.0.0.1:8182/common;
                }
}

现在websocket工作正常。然而,我还需要将它添加到另外两个location元素中。我不确定这是否是正确的方法。

查看Chrome中的检查器。它发送的是大写的Upgrade,而不是upgrade。我不确定这是否是你唯一的问题,但我的问题是不能工作,直到这个问题被解决。

proxy_set_header Connection "upgrade";

应该

proxy_set_header Connection "Upgrade";

相关内容

  • 没有找到相关文章

最新更新