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

如何从SSL加密网站通过HTTPS加载socketio服务?

问题核心原因

/socket.io/socket.io.js返回404的直接原因是你提供的server.js代码中,没有初始化Socket.IO实例,也没有将Socket.IO绑定到你创建的HTTPS服务上,服务端没有对应路由处理该资源请求。

修复步骤

  1. 修改server.js代码,补充Socket.IO初始化逻辑,修正后参考代码如下:
const express = require('express');
const app = express();
const https = require('https');
const fs = require('fs');
// 引入Socket.IO
const { Server } = require("socket.io");

var options = {
    key: fs.readFileSync('/etc/letsencrypt/live/你的域名/privkey.pem'), // 建议替换为证书绝对路径
    cert: fs.readFileSync('/etc/letsencrypt/live/你的域名/cert.pem')
};

const sslserver = https.createServer(options,app);
// 将Socket.IO挂载到HTTPS服务上
const io = new Server(sslserver);

// 连接处理逻辑
io.on('connection', (socket) => {
  // 你的业务逻辑
});

// 监听端口
sslserver.listen(8000, () => {
  console.log('listening on *: 8000');
});
  1. 端口权限配置
  • 检查服务器本地防火墙规则,放行8000端口的TCP入站访问
  • 若使用云服务器,同步在云服务商的安全组配置中放行8000端口
  1. 证书有效性校验
  • 确认证书文件路径正确,运行Node服务的账户拥有证书文件的读取权限
  • 可先在服务器本地执行curl https://www.example.com:8000/socket.io/socket.io.js验证资源是否可正常返回

可选优化(无需对外暴露8000端口)

如果你不想对外暴露8000端口,可以使用Apache反向代理处理Socket.IO请求,在你的Apache SSL虚拟主机配置中加入以下规则即可:

ProxyRequests Off
ProxyPreserveHost On
# 处理WebSocket协议的Socket.IO请求
ProxyPass /socket.io/ ws://127.0.0.1:8000/socket.io/
ProxyPassReverse /socket.io/ ws://127.0.0.1:8000/socket.io/

配置完成后前端代码可以修改为直接请求当前域名的路径,无需携带端口:

<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect({'multiplex': false});
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:54:04