关键在于通过 nginx -s reload 实现证书与 TLS 参数热更新:替换证书文件(权限600/644、路径不变、链完整)、设置 worker_shutdown_timeout、确保 ssl_certificate 在 server 块内,reload 后新连接用新证书和协议,旧连接不受影响。

在 Nginx 升级过程中实现 TLS 证书与协议的热更新且不中断服务,关键不是“升级 Nginx 二进制”,而是把“证书更新”和“TLS 协议/参数调整”从重启依赖中彻底解耦。只要不改动监听套接字、不终止 worker 进程,HTTPS 流量就能持续流转。
证书热更新:用 reload + 正确配置守住连接
证书本身只参与 TLS 握手初始阶段,已建立的连接完全不受影响。真正决定是否中断的,是 reload 的行为逻辑:
- 确保 worker_shutdown_timeout 已显式设置(如
worker_shutdown_timeout 30s;),否则旧 worker 会立即退出,强制断开长连接 - 私钥权限必须为 600,证书文件(含完整链)权限建议 644;权限错误会导致新 worker 加载失败,悄悄回退使用旧证书
- 证书路径不能变,
ssl_certificate和ssl_certificate_key必须写在server{}块内,不能放在http{}或main{}中被忽略 - 替换文件前先备份,再覆盖:
sudo cp fullchain.pem /etc/nginx/ssl/example.com.crt && sudo cp privkey.pem /etc/nginx/ssl/example.com.key - 执行
sudo nginx -t && sudo nginx -s reload,验证用openssl s_client -connect example.com:443 -servername example.com -showcerts 2>/dev/null | openssl x509 -noout -dates
TLS 协议与参数热生效:reload 即可,无需改代码
TLS 版本、加密套件、会话超时等全部由 Nginx 配置控制,修改后 reload 即对新连接生效,老连接继续按原协商参数运行:
-
ssl_protocols TLSv1.2 TLSv1.3;—— 禁用 TLSv1.0/1.1 后,新握手自动跳过,旧连接不受限 -
ssl_ciphers和ssl_prefer_server_ciphers on;—— 仅影响密钥交换阶段,reload 后新连接按新规则协商 -
ssl_session_timeout 4h;和ssl_session_cache shared:SSL:10m;—— 控制会话复用生命周期,reload 不清空缓存,复用照常 -
ssl_buffer_size 4k;或ssl_early_data on;—— 这类优化项 reload 后立即对新连接启用
进阶零中断:绕过 reload,用 njs 动态加载证书
若连 reload 的毫秒级抖动都不能接受(如高频 WebSocket 或 gRPC 场景),可用 Nginx 官方 njs 模块实现内存级证书热插拔:
- Nginx 编译需含
--with-njs和--with-http_ssl_module,njs 版本 ≥ 0.7.10 - 配置中启用钩子:
ssl_certificate_by_njs_file /etc/nginx/njs/ssl_loader.js; - 脚本内用
r.readFile()读取磁盘证书,r.sslCertificate(cert, key)注入内存,每次 TLS 握手都实时加载 - 只需更新磁盘上的 PEM 文件,无需任何信号或 reload,证书变更对连接完全透明
- 适合多域名 SNI 场景,不同域名可指向不同证书目录,天然支持灰度切换
验证是否真无中断:别信日志,要看连接和证书
reload 成功不代表 TLS 更新成功,也不代表连接没断。实测比配置更重要:
- 用
ss -tnp | grep :443 | grep ESTAB | wc -l对比 reload 前后,ESTAB 数应平滑过渡,不归零 - 对活跃 HTTPS 连接持续
curl -I https://example.com,检查 HTTP 状态码是否始终 200,无 connection reset - 抓包看 reload 时刻有无突现 RST 包;查 error log 是否出现
recv() failed或SSL_do_handshake() failed - 用
openssl s_client检查证书有效期和指纹,确认已是新证书;用curl -v看 TLS 版本和 ALPN 协议是否符合预期


















