优化Nginx TLS握手CPU开销需从协议层、会话机制、密码控制和系统调度四方面协同:启用TLS 1.3并精简协商路径;强制双路会话复用;启用OCSP Stapling;绑定worker进程到CPU核并启用reuseport。

优化 Nginx 的 TLS 握手 CPU 开销与异步加解密,核心是“少算、快算、分摊算”——减少完整握手频次、压低单次计算强度、让加密负载在 CPU 核间合理分布。不是靠堆资源硬扛,而是从协议层、会话机制、密码控制和系统调度四方面协同收紧。
启用 TLS 1.3 并精简协商路径
TLS 1.3 将握手压缩至 1-RTT,跳过 Server Key Exchange 和 Change Cipher Spec 等步骤,CPU 消耗比 TLS 1.2 降低 30%~50%。它还默认禁用 RSA 密钥传输、SHA-1、CBC 模式等高开销组件。
- 明确启用:
ssl_protocols TLSv1.2 TLSv1.3;(兼容旧客户端,但禁用 TLSv1.0/1.1) - 限定高效曲线:
ssl_conf_command Curves X25519:secp256r1;(剔除 secp384r1/secp521r1 等慢速曲线) - 白名单签名算法:
ssl_conf_command SignatureAlgorithms ecdsa_secp256r1_sha256:rsa_pss_rsae_sha256;(避免协商时遍历低效组合) - 密码套件聚焦 ECDHE+AEAD:
ssl_ciphers 'TLS13-AES-128-GCM-SHA256:TLS13-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305';
强制双路会话复用,跳过密钥交换
完整握手需执行椭圆曲线点乘或 ECDSA 验签,CPU 开销集中;复用会话可直接恢复主密钥,耗时下降超 70%。必须同时启用服务端缓存 + 客户端票据,互为冗余。
- 全局共享缓存(写在
http块顶层):ssl_session_cache shared:SSL:10m;(10m ≈ 4 万个会话) - 延长复用窗口:
ssl_session_timeout 20m;(移动端切后台、APP 唤醒更易命中) - 开启 Session Tickets:
ssl_session_tickets on;+ssl_session_ticket_key /etc/nginx/ticket.key;(客户端存票据,服务端零存储压力) - 验证是否生效:用
openssl s_client -connect example.com:443 -reconnect观察输出中是否高频出现Reused, SSL handshake succeeded
启用 OCSP Stapling 加速证书验证
客户端直连 CA 查询吊销状态,常因 DNS 解析失败或网络延迟卡住握手,拖慢 150–300ms。Nginx 主动装订响应,将验证压缩到本地内存读取,CPU 和延迟双降。
- 四项配置缺一不可(均写在
server的 443 块内):ssl_stapling on;ssl_stapling_verify on;ssl_trusted_certificate /path/to/fullchain-trusted.pem;(含根 CA + 中间 CA)resolver 1.1.1.1 8.8.8.8 valid=300s;(避免依赖系统 resolver) - 搭配精简证书链:只保留必要中间证书,减少握手阶段的证书传输与解析开销
绑定 worker 进程到 CPU 核并启用 reuseport
HTTPS 新连接涌入时,软中断(NET_RX、RCU)和 TLS 加解密线程容易集中打到少数 CPU 核,造成单核 90%+ 占用而其余空闲。亲和性绑定可保 L1/L2 缓存热度、TLB 命中率和分支预测稳定性。
- 自动绑定:
worker_processes auto;+worker_cpu_affinity auto; - 验证效果:
pidstat -t -p $(pgrep nginx) 1查看各 worker 线程是否稳定运行在指定 PSR 上 - 启用内核级连接分发:
listen 443 ssl reuseport;(配合worker_processes auto,让每个 worker 独立 accept,避免锁竞争) - 同步调优系统参数:
ulimit -n 65536、net.core.somaxconn = 65535、vm.swappiness = 1


















