You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Websockets在Homestead环境下无法工作的问题求助

排查Laravel Websockets在Homestead Nginx环境下无法工作的问题

我来帮你一步步排查这个问题,我之前在Homestead部署websockets时也踩过类似的坑,咱们从几个核心点入手:

1. 确认Homestead的端口转发(关键!)

Homestead是虚拟机,宿主机要访问虚拟机的6001端口,必须先在Homestead.yaml里配置端口转发:

ports:
    - send: 6001
      to: 6001

配置完后执行vagrant reload --provision重启虚拟机,确保端口转发生效。如果没做这一步,宿主机直接连6001端口会失败。

2. 调整Echo配置,匹配Nginx反向代理

你现在的Nginx已经配置了/ws路径的反向代理,但你的Echo配置是直接连6001端口,等于没用到Nginx的代理。两种选择:

选项A:走Nginx代理(推荐,不用额外开放端口)

修改JS配置,去掉wsPort,加上wsPath,如果网站用HTTPS还要开启forceTLS:

import Echo from "laravel-echo"
window.Pusher = require('pusher-js');
window.Echo = new Echo({
    broadcaster: 'pusher',
    key: process.env.MIX_PUSHER_APP_KEY,
    wsHost: window.location.hostname,
    wsPath: '/ws', // 对应Nginx的location /ws
    forceTLS: true, // 网站用HTTPS时必须加
    disableStats: true,
});

选项B:直接连6001端口

确保已经配置了端口转发,然后检查浏览器控制台的Network标签,看ws请求是否能成功建立连接。

3. 验证Websockets服务是否正常运行

在Homestead虚拟机里执行:

  • 先确认php artisan websockets:serve的终端有没有报错,正常启动会显示类似WebSocket Server starting on port 6001的日志。
  • 用curl测试本地连接:curl http://127.0.0.1:6001,如果返回{"event":"pusher:connection_established","data":"{\"socket_id\":\"xxx\",\"activity_timeout\":30}"},说明服务正常。
  • 如果服务没启动,检查是否有依赖问题,比如是否安装了pusher/pusher-php-server包,或者.env里的BROADCAST_DRIVER是否设为pusher。

4. 检查事件广播是否生效

用Laravel Tinker触发事件,看websockets服务的日志是否有广播记录:

php artisan tinker
event(new App\Events\CrudsEvents\DashboardEvent(['test' => 'data']));

如果websockets终端里出现类似Broadcasting [DashboardEvent] on channels [chat-channel]的日志,说明服务端广播正常;如果没有,可能是队列的问题:

  • 默认ShouldBroadcast的事件会进入队列,所以需要启动队列:php artisan queue:work
  • 或者临时把事件改成ShouldBroadcastNow(不需要队列),测试是否能立即广播。

5. 检查浏览器控制台的连接状态

打开浏览器开发者工具(F12),切换到Network标签,筛选WS:

  • 如果看不到ws/wss请求,说明Echo配置有问题,没有发起连接。
  • 如果请求返回404,检查Nginx的location /ws配置是否正确,是否重启了Nginx:sudo service nginx reload
  • 如果请求显示连接失败,检查端口转发或者防火墙是否开放了6001端口。

6. 确认.env配置正确

确保Homestead里的.env文件有以下正确配置:

BROADCAST_DRIVER=pusher
PUSHER_APP_ID=your-app-id
PUSHER_APP_KEY=your-app-key
PUSHER_APP_SECRET=your-app-secret
PUSHER_APP_CLUSTER=mt1 # 随便填一个,因为用的是本地websockets
LARAVEL_WEBSOCKETS_PORT=6001

注意不要把本地的.env直接复制到Homestead,虚拟机里的路径和配置可能不同。

内容的提问来源于stack exchange,提问作者K.33s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:29:51