我有3个scala
和akka-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";