nginx ssl握手优化核心是减少完整握手次数、压缩单次协商路径、避免外部阻塞,需协同启用tls 1.3、双会话复用、ocsp stapling、精简证书链及系统调度配置。

Linux 下 Nginx 优化 SSL 握手,核心是减少完整握手次数、压缩单次协商路径、避免外部阻塞——不是靠升级 CPU,而是让协议能力、缓存机制和系统配置协同生效。
启用 TLS 1.3 并精简密码套件
TLS 1.3 将握手压缩到 1-RTT,CPU 开销比 TLS 1.2 低 30%~50%,且默认前向保密。需确保:
- Nginx ≥ 1.13.0,OpenSSL ≥ 1.1.1
- 在 http 或 server 块中配置:
ssl_protocols TLSv1.2 TLSv1.3;(禁用 TLSv1.0/1.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;,确保服务端主导协商结果
- 可进一步限定曲线与签名算法,跳过低效选项:
ssl_conf_command Curves X25519:secp256r1;
ssl_conf_command SignatureAlgorithms ecdsa_secp256r1_sha256:rsa_pss_rsae_sha256;
强制双会话复用机制
完整握手需做椭圆曲线运算,耗时高;复用能跳过密钥交换和证书验证,实测延迟下降超 70%。
- 在 http 块顶层配置共享缓存(不能写在 server 内):
ssl_session_cache shared:SSL:10m; - 设合理超时时间:
ssl_session_timeout 4h;(移动端、HTTP/2 场景更友好) - 开启 Session Tickets 提供客户端侧兜底:
ssl_session_tickets on;
ssl_session_ticket_key /etc/nginx/ticket.key;(建议每月轮换密钥) - 若后端也走 HTTPS(如微服务代理),加:
proxy_ssl_session_reuse on;
启用 OCSP Stapling 加速证书验证
客户端直连 CA 查吊销状态,常因 DNS 或网络卡顿拖慢 150–300ms。Nginx 主动装订即可绕过。
- 四项配置缺一不可,全写在 server 块(443 监听下):
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/full-chain-trusted.pem;
resolver 1.1.1.1 8.8.8.8 valid=300s;
resolver_timeout 2s; - 证书必须含 Authority Information Access 扩展
- 服务器时间误差 ≤ ±5 分钟,否则 stapling 会被忽略
- 日志中若频繁出现 stapling ignored,说明上游 OCSP 响应失败或 DNS 不通
精简证书链并适配移动端特性
长证书链会导致安卓旧系统校验失败或额外下载;移动端弱网下,每毫秒都关键。
- 使用合并后的 fullchain.pem(域名证书 + 中间证书),不单独放根证书
- 避免冗余中间 CA,推荐用 openssl verify -untrusted intermediates.pem your.crt 验证链完整性
- 对移动端优先的站点,可额外启用 HTTP/2,并关闭不必要扩展(如 0-RTT):
ssl_early_data off; - 配合 worker_processes auto; 和 worker_cpu_affinity auto;,让每个 worker 绑定独立 CPU 核,提升加密调度效率











