2015-10-06 129 views
3

我有3个scalaakka-http应用程序,这些应用程序在ubuntu机器上绑定到localhost不同的端口。我想访问具有相同端口号的所有应用程序。所以我用nginx代理请求并在内部重定向到所需的端口号。 一切正常工作正常。现在,在每个应用程序中,我都内置了使用akka-http构建的websocket。所有WebSocket的请求将被具有网址.../WS/.. 如:在进行代理时Nginx上的Websocket升级头问题

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

看看你的标题在Chrome浏览器。它发送资金Upgrade而不是upgrade。我不确定这是你唯一的问题,但是我的问题才会解决。

proxy_set_header Connection "upgrade";

应该

proxy_set_header Connection "Upgrade";