Ser*_*hyk 3 nginx amazon-web-services socket.io amazon-elastic-beanstalk laravel-echo
在AWS上托管了一个Laravel / Vue.JS应用,该应用在Classic Load Balancer(Elastic Beanstalk)之后,并通过Nginx内部代理到socket.io服务器。SSL在Nginx上终止。
这是nginx配置:
location /socket.io {
proxy_pass http://127.0.0.1:6001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
Run Code Online (Sandbox Code Playgroud)
现在,长轮询模式可以正常运行,但是无法启动升级:
WebSocket与'wss://example.com/socket.io/?EIO = 3&transport = websocket&sid = HmDFtq-aj1WgfGUyAAAJ'的连接失败:WebSocket握手期间出错:意外的响应代码:400
PS Chrome的Frames标签中,我只能看到以下奇怪消息:(Opcode -1)
有没有人成功让socket.io在AWS Elastic Beanstalk环境中工作?我只花了两个星期来处理这个问题,非常感谢任何建议或想法。谢谢!
更新。我打开了详细的日志记录,这是Nginx中的变量:
$host example.com
$proxy_add_x_forwarded_for 134.xxx.xxx.xxx
$http_upgrade -
$remote_addr 172.31.10.208
$remote_user -
$server_name _
$upstream_addr 127.0.0.1:6001
$request GET /socket.io/?EIO=3&transport=polling&t=Lw26sYn&sid=6L5iHma-GJOeE3JQAAAX HTTP/1.1
$upstream_response_time 24.658 msec
$request_time 24.658
Run Code Online (Sandbox Code Playgroud)
也许有人会发现其中一些值不正确,所以我将不胜感激。
您的ELB是使用HTTP / HTTP侦听器还是TCP / SSL侦听器?Websocket仅适用于后一种协议类型。将侦听器更改为TCP,它将起作用。
另外,如果您使用CLI或API构建环境,则您也可以使用应用程序负载平衡器(ALB)而不是经典负载平衡器(ELB)来重建ElasticBeanstalk应用程序,因为ALB还支持websocket。该选项无法通过Web控制台使用。
| 归档时间: |
|
| 查看次数: |
3597 次 |
| 最近记录: |