应优先使用ECDHE密钥交换算法替代RSA或DHE,因其256位椭圆曲线即可达RSA-3072安全强度、计算量更小且支持PFS;同时启用会话复用(ssl_session_cache与ssl_session_timeout)并强制TLSv1.2+,以减少非对称运算频次。

非对称加密运算开销主要集中在 TLS 握手阶段,尤其是密钥交换环节。Nginx 本身不直接执行大量非对称计算,而是依赖 OpenSSL(或 BoringSSL)完成;但配置不当会显著放大 CPU 消耗。关键不是“禁用”非对称加密,而是减少其高频调用、加速其执行、并避免重复计算。
选用高效密钥交换算法
优先使用 ECDHE(椭圆曲线 Diffie-Hellman 密钥交换),而非传统 RSA 密钥交换或 DH/DHE:
- ECDHE 使用 256 位椭圆曲线即可达到 RSA-3072 的安全强度,计算量大幅降低,且支持前向保密(PFS)
- RSA 密钥交换在每次完整握手时都需服务端用私钥解密预主密钥,CPU 压力集中;ECDHE 则将大部分运算分摊到客户端,服务端仅做轻量级椭圆曲线点乘
- 避免 DHE 和 DH:它们需要大素数模幂运算,性能接近 RSA 的两倍,已基本淘汰
启用会话复用机制
让客户端复用已有会话参数,跳过完整握手中的非对称运算步骤:
- ssl_session_cache shared:SSL:10m —— 开启共享内存缓存,供 worker 进程共用,容量建议按并发连接数估算(1MB ≈ 4000 个会话)
- ssl_session_timeout 10m —— 缓存有效期设为 10 分钟,兼顾安全性与复用率;太短导致频繁重握手,太长增加内存占用
- 配合 ssl_session_tickets off(禁用会话票据)可进一步降低服务端状态负担,尤其适合多节点部署
升级协议版本并精简密码套件
TLS 版本和密码套件直接影响非对称运算的频次与强度:
- 强制启用 TLSv1.2 或 TLSv1.3:TLSv1.3 将完整握手压缩至 1-RTT,且废除 RSA 密钥交换,只保留 ECDHE,天然规避 RSA 解密瓶颈
- 在 ssl_ciphers 中明确指定 ECDHE 开头的套件,如 ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384,并剔除所有含 RSA(非 ECDHE-RSA)、DHE、DH 的套件
- 禁用弱算法:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA
卸载部分计算到硬件或代理层(进阶)
当单机 QPS 超过 5000+ 或 CPU 在 TLS 握手上持续超 30%,可考虑外部加速:
- 启用 OpenSSL 的 EC 硬件加速(如 Intel QAT、AWS Nitro Enclaves),需编译时开启对应引擎支持
- 前置 TLS 终结:用 ELB(AWS)、CLB(腾讯云)或 Traefik 等负载均衡器统一处理 HTTPS,Nginx 回源走 HTTP 或 HTTP/2,彻底剥离非对称运算
- 若使用 Nginx Plus,可启用 ssl_certificate_by_lua* 配合 OCSP Stapling 异步获取,避免阻塞主线程


















