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

Laravel 10 Reverb生产环境WebSocket连接失败求助

Laravel Reverb生产环境WebSocket连接失败解决方案

1. 修正前后端配置的核心冲突

你的后端.env和前端bootstrap.js配置存在多处不一致,直接导致连接失败:

  • 后端.env调整:
    BROADCAST_DRIVER=reverb
    REVERB_APP_ID=my-id
    REVERB_APP_KEY=my-key
    REVERB_APP_SECRET=my-secret
    REVERB_HOST="my-domain"  # 改为域名而非公网IP,适配Cloudflare代理逻辑
    REVERB_PORT=443  # 使用Cloudflare默认支持的HTTPS端口,避免8080端口转发问题
    REVERB_SCHEME=https
    
  • 前端bootstrap.js调整:
    import Echo from 'laravel-echo';
    import Pusher from 'pusher-js';
    window.Pusher = Pusher;
    window.Echo = new Echo({
        broadcaster: 'reverb',
        key: 'my-key',
        wsHost: 'my-domain',
        wssPort: 443,
        forceTLS: true,
        enabledTransports: ['wss'],  // 强制走加密wss协议,匹配Cloudflare SSL配置
        disableStats: true,  // 禁用统计请求,减少连接异常点
    });
    

2. 配置Cloudflare的WebSocket转发规则

Cloudflare对非标准端口的WebSocket转发需要手动配置:

  • 登录Cloudflare控制台,进入目标域名的网络选项卡,开启「WebSocket支持」
  • 若坚持使用8080端口,需在规则→页面规则中添加规则:
    • 匹配URL:https://my-domain:8080/*
    • 勾选「WebSocket支持」选项
  • 调整SSL/TLS设置为「灵活」模式(服务器无SSL证书时,Cloudflare与客户端用HTTPS,与服务器用HTTP)

3. 确保Reverb监听正确地址

修改config/reverb.php的监听配置,让Reverb可以被Cloudflare访问:

'listen' => [
    'http' => env('REVERB_LISTEN', '0.0.0.0:8080'),  // 监听所有网卡,而非仅localhost
    'https' => env('REVERB_LISTEN_HTTPS', null),
],

启动Reverb时手动指定监听地址:

php artisan reverb:start --host=0.0.0.0 --port=8080

4. 用进程管理器维持Reverb后台运行

终端关闭后Reverb会停止,需用systemd或supervisor管理服务:

  • 创建/etc/systemd/system/reverb.service文件:
    [Unit]
    Description=Laravel Reverb Server
    After=network.target
    
    [Service]
    User=www-data
    Group=www-data
    WorkingDirectory=/var/www/你的项目路径
    ExecStart=/usr/bin/php artisan reverb:start --host=0.0.0.0 --port=8080
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    
  • 启动并设置开机自启:
    sudo systemctl daemon-reload
    sudo systemctl start reverb
    sudo systemctl enable reverb
    

5. 补充防火墙规则

确保Cloudflare的IP段能访问服务器8080端口,将Cloudflare官方公布的IP段加入iptables:

# 示例,需替换为完整Cloudflare IP段
iptables -A INPUT -s 103.21.244.0/22 -p tcp --dport 8080 -j ACCEPT
iptables -A INPUT -s 103.22.200.0/22 -p tcp --dport 8080 -j ACCEPT

若启用UFW防火墙,执行:

sudo ufw allow 8080/tcp

内容的提问来源于stack exchange,提问作者maximus1127

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:03:34