2013-04-09 201 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。