AWS EC2部署Laravel Websockets无法建立连接返回502错误问题排查
问题解决步骤
- 先修正
config/broadcasting.php配置:当前未配置SSL的场景下,将useTLS和encrypted两个参数的值修改为false,修改完成后执行php artisan config:clear清除配置缓存,避免旧配置残留影响服务运行。 - 启动ws服务的
--host参数必须和nginx配置中proxy_pass的地址完全匹配:- 若使用
php artisan websockets:serve --host=127.0.0.1启动服务,nginx的proxy_pass填http://127.0.0.1:6001/(注意末尾加斜杠,避免将/v2/api/ws路径前缀传递给ws服务) - 若使用
php artisan websockets:serve --host=10.0.0.1启动服务,nginx的proxy_pass填http://10.0.0.1:6001/
- 若使用
- 无法绑定公网IP启动属于正常现象:EC2的公网IP未直接配置在实例网卡上,本地进程无法直接绑定公网IP,不需要尝试该启动方式。
- 本地连通性校验:启动ws服务后,先在EC2实例本地执行
curl http://127.0.0.1:6001(对应你启动时指定的host地址),如果无法正常返回内容,说明ws服务本身未正常启动,优先排查服务启动日志的报错信息。 - laravel-websockets的配置会直接影响
php artisan websockets:serve命令的运行,所有配置修改后都需要重启ws服务才能生效。 - 走nginx代理的场景下,不需要对外放开6001端口的安全组/ufw规则,所有ws请求都会通过80/443端口由nginx转发,对外开放6001端口反而存在安全风险,排查完成后可以关闭对应规则。
内容的提问来源于stack exchange,提问作者Sylar
相关产品推荐
相关产品推荐

