核心是通过协议升级、密码精简、会话复用和CPU绑定四方面协同优化TLS性能:启用TLS 1.3并限定AEAD套件,裁剪曲线与签名算法,双模式会话复用,绑定worker至物理核。

核心是减少完整握手次数、压低单次计算量,并让 TLS 处理与 CPU 缓存对齐——不是靠升级硬件,而是从协议选择、密码控制、会话复用和系统调度四个层面协同压缩开销。
启用 TLS 1.3 并精简密码套件
TLS 1.3 握手只需 1-RTT,跳过密钥交换协商和冗余消息,CPU 开销比 TLS 1.2 低 30%~50%。必须确保 Nginx ≥ 1.13.0、OpenSSL ≥ 1.1.1。
- 强制启用新版协议: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;
限定曲线与签名算法,砍掉协商路径
客户端发来的冷门曲线(如 secp384r1)和弱签名组合(如 SHA-1)会触发 OpenSSL 遍历匹配,白白消耗 CPU。直接裁剪协商空间,让握手更快更轻。
- 只接受两条高性能曲线:ssl_conf_command Curves X25519:secp256r1;
- 白名单签名算法:ssl_conf_command SignatureAlgorithms ecdsa_secp256r1_sha256:rsa_pss_rsae_sha256:rsa_pkcs1_sha256;
- 不启用 ssl_dhparam——ECC 场景下完全不需要 DH 参数解析
强制双会话复用,避免重复非对称运算
每次完整握手都要做 ECDH 或 ECDSA 运算,耗时高、CPU 密集。复用可跳过密钥交换和证书验证,实测耗时下降超 70%。关键是“共享”+“双保险”。
- 在 http { } 块顶层配置共享缓存:ssl_session_cache shared:SSL:10m;(写在 server 里无效)
- 设合理超时:ssl_session_timeout 4h;(默认 5 分钟太短,移动端易失效)
- 开启 Session Tickets:ssl_session_tickets on; + ssl_session_ticket_key /etc/nginx/ticket.key;
- 后端也走 HTTPS?加 proxy_ssl_session_reuse on;
绑定 worker 到物理 CPU 核,稳住缓存热度
TLS 计算高度依赖 L1/L2 缓存和 TLB。进程跨核迁移会导致缓存失效、分支预测重置,加密延迟激增。尤其在高频小包握手场景下,影响显著。
- 自动绑定物理核:worker_processes auto; + worker_cpu_affinity auto;
- 验证是否生效:ps -eo pid,comm,psr | grep nginx 查看各 worker 是否稳定落在不同 CPU ID 上
- 同步调高资源上限:worker_rlimit_nofile 100000; + net.core.somaxconn = 65535;











