在执行代理时,Nginx中Websocket升级标头的问题

时间:2015-10-06 07:41:50

标签: nginx proxy websocket

我有3个scalaakka-http个应用程序绑定到localhost ubuntu机器中的不同端口。我想访问具有相同端口号的所有应用程序。所以我使用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标头。所以我在location元素的nginx配置文件中进行了以下更改。

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工作正常。但是,我还需要将其添加到另外两个位置元素中。 我不确定这是否是正确的做法。有人可以指导我吗?

1 个答案:

答案 0 :(得分:1)

在标题处查看Chrome中的检查器。它发送的资金Upgrade不是upgrade。我不确定这是否是你唯一的问题,但是在修复之后我的工作才会有效。

proxy_set_header Connection "upgrade";

应该是

proxy_set_header Connection "Upgrade";