如何为Socket.io配置WSS协议?网站采用Cloudflare提供HTTPS
配置Socket.io使用WSS协议(配合Cloudflare HTTPS)
一、先确认Cloudflare的基础配置
- 开启WebSocket支持:登录Cloudflare控制台→进入你的域名→「网络」选项卡→找到「WebSocket」开关,确保处于开启状态(默认通常是开启的,但建议手动确认)。
- 配置SSL/TLS模式:
- 如果你的源服务器(Origin Server)没有部署SSL证书,选择「灵活」模式(Cloudflare与用户端用HTTPS,与源服务器用HTTP);
- 如果源服务器已有合法SSL证书,选择「严格」模式(全程HTTPS,安全性更高)。
二、服务器端Socket.io配置
根据源服务器是否有SSL证书,分两种情况处理:
情况1:源服务器未配置SSL(依赖Cloudflare代理HTTPS)
此时无需给Socket.io配置HTTPS服务器,但需要让它信任Cloudflare的代理,这样才能正确识别客户端的WSS请求。示例代码:
const express = require('express'); const http = require('http'); const { Server } = require('socket.io'); const app = express(); const server = http.createServer(app); const io = new Server(server, { cors: { origin: "https://your-domain.com", // 替换为你的网站域名 methods: ["GET", "POST"] }, trustProxy: true // 关键:信任Cloudflare代理,确保Socket.io识别到WSS协议 }); // 你的Socket.io业务逻辑 io.on('connection', (socket) => { console.log('用户已连接'); // ...其他逻辑 }); server.listen(3000); // 监听源服务器的端口,Cloudflare需转发该端口的请求
情况2:源服务器已配置SSL证书
直接创建HTTPS服务器并挂载Socket.io即可,示例代码:
const express = require('express'); const https = require('https'); const fs = require('fs'); const { Server } = require('socket.io'); const app = express(); // 加载本地SSL证书文件 const sslOptions = { key: fs.readFileSync('/path/to/your-private-key.pem'), cert: fs.readFileSync('/path/to/your-certificate.pem') }; const server = https.createServer(sslOptions, app); const io = new Server(server, { cors: { origin: "https://your-domain.com", methods: ["GET", "POST"] } }); // 你的Socket.io业务逻辑 io.on('connection', (socket) => { console.log('用户已连接'); // ...其他逻辑 }); server.listen(443); // 标准HTTPS端口,或自定义端口(需在Cloudflare配置转发)
三、客户端连接配置
客户端只需将Socket.io的连接地址改为HTTPS/WSS协议即可,两种写法都可行:
// 写法1:直接用网站域名,Socket.io会自动适配WSS(推荐) const socket = io("https://your-domain.com"); // 写法2:明确指定WSS协议 const socket = io("wss://your-domain.com");
如果你的Socket.io服务部署在子路径下(比如/chat-socket),记得加上路径:io("https://your-domain.com/chat-socket")
四、验证配置是否生效
打开浏览器开发者工具→「网络」面板→筛选「WS」类型,查看连接的协议是否为wss://,且状态显示为「已建立」即可。
内容的提问来源于stack exchange,提问作者Olex7iMatix
相关产品推荐
相关产品推荐

