Laravel 10使用Soketi广播事件失败:cURL无法解析主机
解决Laravel + Soketi广播的cURL错误6(无法解析主机)
问题核心
当前错误为cURL错误6:无法解析主机app.myapp.com,说明Laravel广播进程(通过Horizon)尝试向Soketi服务发送请求时,服务器无法将域名app.myapp.com解析为对应IP地址。
排查与解决步骤
1. 验证服务器本地域名解析能力
在服务器终端执行以下命令,测试域名是否能正常解析:
ping app.myapp.com # 或者用更精准的解析测试 nslookup app.myapp.com
- 若返回"无法解析主机":
- 若
app.myapp.com是自定义本地域名,直接在服务器/etc/hosts文件添加IP映射:sudo nano /etc/hosts # 添加一行(Soketi本地运行填127.0.0.1,远程服务器填对应公网/内网IP) 127.0.0.1 app.myapp.com - 若为公网域名,刷新服务器DNS缓存:
等待数分钟后再次测试,若仍失败,检查域名DNS记录是否正确生效。sudo systemd-resolve --flush-caches
- 若
2. 调整Laravel广播配置,绕过DNS解析
如果Soketi与Laravel部署在同一服务器,直接在.env文件中使用IP而非域名,规避DNS解析问题:
# 替换原PUSHER_HOST为本地IP或127.0.0.1 PUSHER_HOST=127.0.0.1 PUSHER_PORT=6001 PUSHER_APP_ID=my-ws PUSHER_APP_KEY=my-websocket PUSHER_APP_SECRET=你的Soketi密钥 # 确保广播驱动为pusher BROADCAST_DRIVER=pusher
修改后重启Horizon与Laravel应用:
php artisan horizon:restart php artisan queue:restart
3. 确认Soketi服务可访问性
在服务器本地直接测试Soketi的API接口,验证服务是否正常运行:
# 若Soketi用HTTPS curl https://127.0.0.1:6001/apps/my-ws/events -I # 若用HTTP则替换为http://
返回200系列状态码说明服务正常;若连接失败,检查Soketi的pm2进程是否运行、端口是否被占用。
4. 检查Horizon环境变量加载
确保Horizon运行时加载的是正确的.env配置文件,避免配置不一致。可通过Horizon面板查看当前环境变量,或重启时指定环境:
php artisan horizon:restart --env=production
内容的提问来源于stack exchange,提问作者Saiful Alam
相关产品推荐
相关产品推荐

