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

Fastify监听3000端口HTTPS请求失败,请求协助排查

问题分析与解决

核心问题

你遇到的error:1400410B:SSL routines:CONNECT_CR_SRVR_HELLO:wrong version number错误,本质是Fastify的HTTPS/HTTP2配置未生效,导致3000端口实际运行的是HTTP服务,而非HTTPS服务。当你用HTTPS协议请求HTTP服务时,服务器返回的是HTTP响应头而非SSL握手报文,curl就会抛出SSL版本不匹配的错误。

错误根源在你的Fastify初始化代码:你向Fastify构造函数传递了两个独立的配置对象,但Fastify仅会处理第一个参数,第二个对象中的http2和https配置完全没被加载。

修正方案

将所有配置选项合并到一个对象中,传递给Fastify构造函数:

const fs = require('fs');
const path = require('path');
const fastify = require('fastify')({
  logger: true,
  http2: true,
  https: {
    cert: fs.readFileSync(path.resolve(__dirname,'../../etc/letsencrypt/live/example.com/cert.pem')),
    key: fs.readFileSync(path.resolve(__dirname,'../../etc/letsencrypt/live/example.com/privkey.pem')),
    secureProtocol: 'TLSv1.2'
  }
});

额外注意事项

  • 无需修改Apache配置:你的Fastify直接监听3000端口,和Apache的443端口没有关联,修改VirtualHost添加3000端口不仅无效,还可能导致端口冲突(如果Apache尝试监听3000但Fastify已占用)。
  • 验证证书路径:确保cert.pem和privkey.pem的文件路径正确,Fastify进程有读取权限。
  • curl测试优化:启用HTTP2后,可添加--http2参数确保curl使用HTTP2协议请求:
    curl -k --http2 https://example.com:3000/ -v
    

验证步骤

  1. 重启Fastify服务,查看启动日志,确认是否输出HTTPS/HTTP2相关的初始化信息。
  2. 重新执行curl命令,检查是否能正常获取响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:03:18