Laravel生产环境中Pusher WebSocket连接失败问题求助
Laravel生产环境中Pusher WebSocket连接失败问题求助
嘿,看起来你遇到的问题很典型,我来帮你分析下解决方案:
从你给出的错误信息WebSocket connection to 'wss://ws-%22eu%22...' failed:里,%22是双引号的URL编码,这说明你的Pusher集群参数被额外的双引号包裹了,导致生成的WebSocket地址格式错误,自然连接失败。
下面是具体的排查和解决步骤:
检查.env文件的集群配置
打开生产环境的.env文件,找到PUSHER_APP_CLUSTER这一行,确保它的值没有被双引号包裹。正确的写法应该是:PUSHER_APP_CLUSTER=eu很多人会不小心写成
PUSHER_APP_CLUSTER="eu",本地环境可能不会暴露问题,但生产环境的配置解析会把引号也带进去,导致URL编码异常。清除Laravel配置缓存
生产环境下Laravel默认会缓存配置文件,修改.env后必须清除并重新缓存配置才能生效,运行以下命令:php artisan config:clear php artisan config:cache验证前端的Echo初始化配置
如果你用Laravel Echo连接Pusher,要确保前端代码里的cluster参数没有额外引号。比如:import Echo from 'laravel-echo'; import Pusher from 'pusher-js'; window.Pusher = Pusher; window.Echo = new Echo({ broadcaster: 'pusher', key: import.meta.env.VITE_PUSHER_APP_KEY, cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER, // 确保这里的值无多余引号 forceTLS: true });如果是通过VITE变量传递配置,也要保证
.env里的VITE_PUSHER_APP_CLUSTER没有引号。额外的排查要点
- 确认Pusher控制台中你的应用对应的集群确实是
eu,避免集群配置错误 - 核对生产环境的
PUSHER_APP_KEY、PUSHER_APP_SECRET、PUSHER_APP_ID是否和Pusher控制台完全一致,没有拼写错误 - 如果前端和后端存在跨域场景,要在Pusher控制台的「App Settings」->「Authorized Origins」中添加生产环境的域名,避免跨域拦截
- 确认Pusher控制台中你的应用对应的集群确实是
我之前遇到过一模一样的情况,就是.env里的集群参数多了双引号导致的,按照上面的步骤排查,应该能解决你的问题!
备注:内容来源于stack exchange,提问作者Abdelrahman
相关产品推荐
相关产品推荐

