2015-10-06 128 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";