2013-04-09 151 views
28

我想在AWS Elastic Beanstalk上使用socket.io設置websocket-server。該殺/socket.io/1/?t=xxxx啓動和運行,但WebSocket的握手失敗,此錯誤的初始請求:AWS上的socket.io的Websockets Elastic Beanstalk

WebSocket connection to 'ws://xxxxxx.elasticbeanstalk.com/socket.io/1/websocket/a4DTCN2BeJZuiSaphVyz' failed: Unexpected response code: 502 

從谷歌搜索和尋找錯誤502(錯誤網關)似乎與nginx-proxy有關。那麼如何配置nginx以使用websockets?

在AWS文檔中找不到關於設置websockets的任何內容。

+3

通過將代理從nginx更改爲無代理來實現它。 – funparko 2013-04-11 06:47:07

+1

我也看到了相同的問題報告(可怕的)「WebSocket握手期間的錯誤:非預期的響應代碼:400」 – Jason 2016-03-12 00:22:50

回答

26

你可以嘗試通過配置nginx的麻煩,但如果你只使用websockets,關閉所有proxys並直接連接會更容易。

這是在您的應用程序環境下的彈性beanstalk儀表板。在右側標有「操作」的下拉按鈕。選擇「編輯/加載配置」

enter image description here

+5

從2014年4月13日起,這位於:<應用程序名稱>/<環境名稱> /配置/軟件配置/容器選項。 – Rob 2014-04-13 18:48:34

+0

「更容易」也意味着更好嗎?就像,通過將代理服務器設置爲nginx(除了靜態文件映射和gzip壓縮,這兩者我不需要),您會得到什麼結果。性能和安全性如何?沒有代理服務器,我懷疑性能會更好。但是,安全呢?對於WSS(通過SSL/TLS的WebSockets),nginx更好嗎,還是我應該實現[SSL with Node.js](https://github.com/einaros/ws/blob/master/examples/ssl.js)?什麼是DoS保護?還要別的嗎? – ma11hew28 2014-11-08 19:17:27

+1

我關閉了代理服務器,但我得到一個錯誤連接已建立之前關閉,問題發佈在這裏:http://stackoverflow.com/questions/26880396/socket-io-error-web-socket-connection- is-closed-before-the-connection-is-estab – user2727195 2014-11-12 06:42:00

4

有一個與溝-nginx的方法一顯著的缺點。你將不得不將https移動到節點,並且還要移動到你的socket.io調用。在服務器配置中管理https比在節點中更容易。

如果您不需要https,我建議轉儲代理並直接轉到節點。

+6

這是不正確的,您可以直接在Load Balancer上添加證書。 – 2016-02-04 23:05:52

3

Socket.io默認爲端口8080.通過在AWS Admin> EC2>安全組中添加「入站>定製TCP規則」,確保您的EC2安全組已啓用端口8080。