You need to enable JavaScript to run this app. 排查AWS EC2服务器上Laravel WebSockets控制台404问题
优惠活动
大模型
产品
解决方案
定价
更多

排查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服务器配置中增加对应规则:
    1. 将 /laravel-websockets 路径的请求转发到本地 127.0.0.1:6001 端口的WebSocket服务
    2. 开启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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 16:06:04