有一个 Laravel/Vue.JS 应用程序托管在 AWS 后面的经典负载均衡器 (弹性 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;
}
现在,长轮询模式可以正常工作,但无法启动升级:
WebSocket 连接到 'wss://example.com/socket.io/?EIO=3&transport=websocket&sid=HmDFtq-aj1WgfGUyAAAJ' 失败: WebSocket 握手期间出错:响应码不正确:400
附注:在 Chrome 的 Frames
选项卡中,我只能看到这个奇怪的消息:(Opcode -1)
有人在 AWS Elastic Beanstalk 环境下成功使用 socket.io 吗?我浪费了两个星期处理这个问题,非常感谢任何建议或想法。谢谢!
更新。我打开了详细日志记录,并查看了 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
也许有些人会发现其中一些数值不正确,所以我希望得到任何建议。
proxy_set_header Host $host;
并测试。 - Tarun Lalwani6001
套接字服务器日志中看到了什么? - Tarun Lalwani