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

生产环境Laravel-WebSockets连接始终Pending问题求助

生产环境WebSocket连接Pending问题排查与修复

核心问题分析

相同配置下之前项目正常,当前连接持续Pending,大概率是端口暴露/代理缺失、SSL证书不匹配、服务未正常运行或防火墙拦截导致。以下是逐一排查修复步骤:

1. 补全Nginx WebSocket代理配置

当前Nginx未配置WebSocket请求转发,直接访问6001端口易被拦截或触发SSL握手异常。在Nginx的server块中添加以下配置:

location /app/ {
    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;
}

修改后重启Nginx:systemctl restart nginx

2. 调整客户端连接地址

将原连接地址:

wss://mysite:6001/app/{key}

改为:

wss://mysite.com/app/{key}

(无需携带6001端口,由Nginx自动转发)

3. 检查SSL证书匹配性

.env中证书路径指向www.domain,但server_name是mysite.com,需确认证书文件属于mysite.com:

  • 替换.env中的证书路径为对应mysite.com的证书路径,例如:
    LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT=/www/server/panel/vhost/cert/mysite.com/fullchain.pem
    LARAVEL_WEBSOCKETS_SSL_LOCAL_PK=/www/server/panel/vhost/cert/mysite.com/privkey.pem
    
  • 重启Laravel WebSockets服务生效

4. 确保WebSockets服务后台运行

直接运行php artisan websockets:serve仅能临时启动服务,生产环境需用进程管理器托管(以supervisor为例):

  1. 创建supervisor配置文件/etc/supervisor/conf.d/laravel-websockets.conf:
    [program:laravel-websockets]
    process_name=%(program_name)s_%(process_num)02d
    command=php /www/wwwroot/mysite.com/artisan websockets:serve
    autostart=true
    autorestart=true
    user=www
    numprocs=1
    redirect_stderr=true
    stdout_logfile=/www/wwwroot/mysite.com/storage/logs/websockets.log
    
  2. 更新并启动服务:
    supervisorctl reread
    supervisorctl update
    supervisorctl start laravel-websockets:*
    

5. 验证广播驱动配置

确保.env中广播驱动设置正确:

BROADCAST_DRIVER=pusher

当前broadcasting.php默认值为null,需显式设置为pusher才能启用WebSockets广播。

6. 防火墙/安全组检查

  • 若使用Nginx代理,仅需开放服务器80/443端口,6001端口仅需允许本地访问(Nginx转发时用127.0.0.1)
  • 若直接暴露6001端口,需在服务器防火墙(如ufw)和云服务商安全组中开放6001端口的TCP访问

7. 测试连接有效性

用curl测试WebSocket握手:

curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: mysite.com" -H "Origin: https://mysite.com" -H "Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==" -H "Sec-WebSocket-Version: 13" https://mysite.com/app/test?protocol=7&client=js&version=7.4.0&flash=false

返回101 Switching Protocols则连接正常,否则查看服务器日志定位具体错误。

内容的提问来源于stack exchange,提问作者Мохамед Русланович

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:35:26