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

如何配置laravel-websockets使其适配子目录部署的Laravel应用

解决方案

核心原因是Laravel Echo默认发起WebSocket连接时不会自动携带应用部署的子目录路径,需要手动指定路径参数,配合反向代理配置即可解决:

第一步:修改前端app.js配置

在Echo初始化参数中新增path参数,值为子目录前缀加Websocket服务默认路径:

window.Echo = new Echo({
  broadcaster: 'pusher',
  key: process.env.MIX_PUSHER_APP_KEY,
  wsHost: window.location.hostname,
  wsPort: 6001,
  wssPort: 6001,
  forceTLS: true,
  disableStats: true,
  // 新增配置,子目录前缀和你实际部署的路径保持一致
  path: '/app1/ws'
});

如果子目录不固定,可以用动态拼接方式避免硬编码:path: window.location.pathname.replace(/\/$/, '') + '/ws'

第二步:配置Nginx反向代理

需要将带子目录前缀的Websocket请求代理到本地Websocket服务端口,同时重写路径去掉子目录前缀:

location /app1/ws {
    proxy_pass http://127.0.0.1:6001;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    # 重写路径去掉/app1前缀,匹配Websocket服务端的默认路径规则
    rewrite ^/app1/ws/(.*)$ /ws/$1 break;
}

第三步:修改后端config/broadcasting.php配置(可选)

如果后端主动推送事件也异常,在pusher配置项中新增对应路径参数即可:

'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'),
    'host' => '127.0.0.1',
    'encrypted' => false,
    'port' => 6001,
    'scheme' => env('HTTP_SCHEME', 'http'),
    // 新增配置
    'path' => '/app1/ws'
  ]
],

生效操作

修改完成后执行以下操作即可:

  • 重新编译前端资源:npm run prod
  • 清空Laravel配置缓存:php artisan config:clear
  • 重启Websocket服务(Laravel Websockets/Soketi等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 16:57:03