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

使用@fastify/websocket切换到HTTPS后无法建立ws/wss连接

解决Fastify + @fastify/websocket HTTPS环境下wss连接失败问题

针对你遇到的HTTPS下WebSocket无法建立连接的问题,可按以下步骤排查修复:

1. 客户端必须使用wss://协议

HTTP环境对应ws://前缀,HTTPS环境下必须使用wss://作为WebSocket连接地址前缀,例如客户端连接代码应为:

new WebSocket('wss://your-domain.com/live');

2. 调整CORS配置以支持WebSocket握手

WebSocket握手依赖Upgrade、Connection等特殊请求头,需在@fastify/cors中明确允许这些头及相关请求方法:

fastify.register(require("@fastify/cors"), {
  origin: config.domains,
  credentials: true,
  allowedHeaders: ['Upgrade', 'Connection', 'Sec-WebSocket-Key', 'Sec-WebSocket-Version'],
  methods: ['GET', 'OPTIONS']
});

3. 为HTTPS实例启用日志,排查握手错误

你的HTTPS模式Fastify实例未开启日志,添加logger: true后可查看WebSocket握手的详细请求日志,快速定位是否有403/500等错误:

const fastify = config.https === false
    ? require("fastify")({ serverTimeout: 60 * 60 * 1000, logger: true })
    : require("fastify")({
        serverTimeout: 60 * 60 * 1000,
        logger: true, // 新增日志配置
        https: {
            key: fs.readFileSync(config.privKey),
            cert: fs.readFileSync(config.certKey),
        }
    });

4. 验证HTTPS证书完整性

如果你的证书包含中间CA证书,需确保将完整证书链传入cert字段,或者单独配置ca选项:

https: {
  key: fs.readFileSync(config.privKey),
  cert: fs.readFileSync(config.certKey), // 可包含主证书+中间证书内容
  // 若中间证书单独存放,添加以下配置:
  // ca: fs.readFileSync('./path/to/ca-chain.pem')
}

5. 确认插件版本兼容性

检查@fastify/websocket与Fastify主版本是否兼容,例如Fastify v4需要搭配@fastify/websocket v7及以上版本。可通过以下命令查看版本:

npm list

若版本不兼容,执行升级命令:

npm install @fastify/websocket@latest

按上述步骤调整后,重新启动服务测试wss连接,若仍有问题可通过Fastify日志输出的握手请求信息进一步定位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:52:15