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
验证步骤
- 重启Fastify服务,查看启动日志,确认是否输出HTTPS/HTTP2相关的初始化信息。
- 重新执行curl命令,检查是否能正常获取响应。
内容的提问来源于stack exchange,提问作者user1207289
相关产品推荐
相关产品推荐

