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

解决Laravel部署至VPS后无法获取Socket.io的SSL协议错误问题

解决Laravel Echo部署Ubuntu-Nginx环境后SSL协议错误问题

出现GET https://example.com:6001/socket.io/socket.io.js net::ERR_SSL_PROTOCOL_ERROR的核心原因是:浏览器用HTTPS协议访问6001端口,但该端口的Socket.IO服务未配置SSL证书,也没通过Nginx做SSL反向代理——主站正常是因为Nginx已经为443端口配置了SSL,和6001端口的服务是独立的。

下面是两种可行的解决办法:

方案1:Nginx反向代理Socket.IO(推荐生产环境使用)

通过Nginx统一处理SSL,无需直接暴露6001端口,更安全规范:

  1. 编辑你的Nginx站点配置文件(通常在/etc/nginx/sites-available/example.com),添加以下反向代理规则:
location /socket.io {
    proxy_pass http://localhost: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;
}
  1. 重启Nginx生效配置:
sudo systemctl restart nginx
  1. 修改前端代码,去掉端口号,直接走主站域名:
  • Blade模板中的script标签:
<script src="{{ url('/socket.io/socket.io.js') }}"></script>
  • laravel-echo-setup.js中的Echo配置:
import Echo from "laravel-echo";

window.Echo = new Echo({
    broadcaster: "socket.io",
    host: window.location.protocol + "//" + window.location.hostname,
});

方案2:给Socket.IO服务直接配置SSL

如果必须直接使用6001端口,需要让Socket.IO服务加载SSL证书:

  1. 修改Laravel的config/broadcasting.php,为socketio驱动添加SSL配置(替换成你的证书路径):
'socketio' => [
    'driver' => 'socketio',
    'host' => env('SOCKET_IO_HOST', 'localhost'),
    'port' => env('SOCKET_IO_PORT', 6001),
    'ssl' => [
        'cert' => '/etc/ssl/certs/example.com.crt',
        'key' => '/etc/ssl/private/example.com.key',
    ],
],
  1. 重启Laravel Echo Server:
laravel-echo-server restart
  1. 开放服务器防火墙的6001端口TCP流量:
sudo ufw allow 6001/tcp

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:03:23