要在 nginx 中真正降低 https 性能损耗,必须同步做好会话优化,核心是让多数连接跳过完整握手;需启用 tls 1.3、双路径会话复用(共享缓存+session tickets)、ocsp stapling、精简证书链、http/2 及 hsts 等综合配置。

要在 Nginx 中真正降低 HTTPS 的性能损耗,光启用 TLS 1.3 远不够——必须同步做好会话优化。核心目标是让绝大多数连接跳过完整握手,避免重复密钥交换、证书验证和签名运算。实测中,合理配置后 TLS 握手耗时可从 10ms+ 压至 1–3ms,CPU 占用下降 40% 以上。
确认基础支持并启用 TLS 1.3
先确保底层就绪:Nginx ≥ 1.13.0,OpenSSL ≥ 1.1.1(运行 nginx -V 和 openssl version 验证)。不满足则升级,否则配置无效。
- 在
http或server块中明确声明协议:ssl_protocols TLSv1.2 TLSv1.3;(禁用 TLSv1.0/v1.1) - 优先选用高效 AEAD 套件,例如:
ssl_ciphers 'TLS13-AES-128-GCM-SHA256:TLS13-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305'; - 添加
ssl_prefer_server_ciphers on;(TLS 1.3 下该指令被忽略,但保留可兼容旧 OpenSSL 版本)
强制双路径会话复用机制
完整握手开销高,复用能跳过密钥协商与证书校验。只开一个缓存或只设 timeout 不够,需“共享缓存 + Session Tickets”双保险。
- 在
http { }块顶层唯一配置共享缓存:ssl_session_cache shared:SSL:10m;(不能写在 server 内,否则无效) - 设长超时:
ssl_session_timeout 4h;(默认 5 分钟太短,移动端或间歇访问复用率极低) - 启用服务端票据:
ssl_session_tickets on;,并轮换密钥:ssl_session_ticket_key /etc/nginx/ticket.key;(需定期更新密钥文件) - 若后端也走 HTTPS(如微服务代理),加
proxy_ssl_session_reuse on;,避免后端重复握手
精简握手链路,消除外部阻塞
很多延迟不是来自计算,而是卡在 DNS 查询、OCSP 验证或冗长证书链上。这些环节会把毫秒级操作拖成数百毫秒阻塞。
- 启用 OCSP Stapling:
ssl_stapling on;、ssl_stapling_verify on;,并配好可信 CA:ssl_trusted_certificate /path/to/ca-bundle.crt; - 指定 resolver(推荐使用本地 DNS 缓存或公共 DNS):
resolver 8.8.8.8 1.1.1.1 valid=300s; - 精简证书链:只保留域名证书 + 一级中间 CA,去掉根证书;用
openssl verify -untrusted检查链完整性 - 限制协商参数,减少协商时间:
ssl_conf_command Curves X25519:secp256r1;、ssl_conf_command SignatureAlgorithms ecdsa_secp256r1_sha256:rsa_pss_rsae_sha256;
搭配 HTTP/2 与前向安全加固
TLS 1.3 天然支持前向保密,但还需配合其他协议层优化,才能释放全部性能红利。
- 监听时启用 HTTP/2:
listen 443 ssl http2;(提升并发请求处理效率) - 加 HSTS 头强制浏览器复用安全连接:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; - 关闭不必要功能:如无特殊需求,可关掉
ssl_session_tickets off;(部分场景下票据加解密反而增加 CPU 开销) - 避免双重加密:后端代理尽量用 HTTP,而非
proxy_pass https://,否则 TLS 层叠导致 CPU 翻倍











