排查AWS EC2服务器上Laravel WebSockets控制台404问题
问题场景
我正在尝试集成Laravel WebSockets服务并访问其内置控制台:
- 本地环境下访问
http://127.0.0.1:8000/laravel-websockets地址可以正常打开控制台 - 部署到线上环境后,访问
www.mysite.com/laravel-websockets时提示页面不存在 - 使用的社区扩展包为BeyondCode维护的Laravel WebSockets,线上托管环境为AWS EC2实例
附带的配置文件 config/broadcasting.php 内容如下:
<?php return [ /* |-------------------------------------------------------------------------- | 默认广播驱动 |-------------------------------------------------------------------------- | | 该选项用于定义系统触发事件广播时使用的默认广播器, | 可设置为下方"connections"数组中定义的任意连接项。 | | 支持选项: "pusher", "ably", "redis", "log", "null" | */ 'default' => env('BROADCAST_DRIVER', 'null'), /* |-------------------------------------------------------------------------- | 广播连接配置 |-------------------------------------------------------------------------- | | 此处可定义所有用于广播事件的连接配置,支持向其他系统 | 或WebSocket链路广播事件,数组内提供了每种连接类型的示例配置。 | */ 'connections' => [ 'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ 'cluster' => env('PUSHER_APP_CLUSTER'), 'useTLS' => false, 'host' => '127.0.0.1', 'port' => 6001, 'scheme' => 'http' ], ], 'ably' => [ 'driver' => 'ably', 'key' => env('ABLY_KEY'), ], 'redis' => [ 'driver' => 'redis', 'connection' => 'default', ], 'log' => [ 'driver' => 'log', ], 'null' => [ 'driver' => 'null', ], ], ];
排查与解决步骤
按照从易到难的顺序逐一排查定位:
- 确认路由注册状态
Laravel WebSockets的控制台路由默认仅在本地环境自动注册,生产环境下需要手动开启访问开关。检查config/websockets.php配置文件中的enable_console项是否设置为true,同时确认route_middleware配置中没有将控制台接口拦截在认证流程之外。 - 确认WebSocket服务进程常驻运行
本地开发时可通过php artisan websockets:serve手动启动服务,但线上环境不能直接以前台命令方式启动服务,需要配置进程守护工具(如Supervisor)让该进程在服务器后台持续运行;若服务未启动,不仅控制台无法访问,所有WebSocket连接也会全部建立失败。 - 配置Web服务器请求转发规则
默认情况下域名对应的80/443端口是指向Nginx/Apache的Web服务,没有直接映射到6001端口的WebSocket服务,需要在Web服务器配置中增加对应规则:- 将
/laravel-websockets路径的请求转发到本地127.0.0.1:6001端口的WebSocket服务 - 开启WebSocket协议升级支持,保证长连接可以正常建立
- 将
- 检查AWS EC2安全组规则
确认安全组的入站规则中开放了6001端口的访问权限,同时放行所有来自Web服务器的本地转发流量;如果使用了CDN或弹性负载均衡,需要确认对应组件的WebSocket转发配置没有拦截该路径的请求。 - 清理线上环境配置缓存
部署完成后依次执行php artisan config:clear、php artisan route:clear、php artisan cache:clear命令,避免线上环境加载了本地开发阶段生成的旧配置缓存,导致路由解析失败。 - 修正前端连接的可达配置
当前pusher连接配置中host固定写为127.0.0.1,该地址仅能被服务器本地进程访问,线上客户端浏览器无法通过该地址建立连接。如果通过Web服务器反向代理转发WebSocket请求,需要将前端连接的host调整为实际访问的域名,同时根据是否启用HTTPS匹配对应的scheme配置,避免连接失败。
内容的提问来源于stack exchange,提问作者Message Plus
相关产品推荐
相关产品推荐

