SSL握手耗时不降低worker_connections理论上限,但会因未完成握手连接长期占用资源而拖慢实际并发效率;优化需强制TLS 1.3、优选ECDHE+ECDSA/Ed25519、禁用老旧协议套件、提升会话复用率、启用异步OCSP与kTLS卸载、合理设置超时及CPU绑定。

SSL 握手耗时本身不直接减少 worker_connections 的理论上限,但会显著拖慢其实际并发处理效率——因为每个未完成握手的连接都会持续占用一个 worker 连接槽、内存和 CPU 时间,直到超时或完成。真正卡住并发建连的,不是连接数配额不够,而是大量连接“堵在握手半途”,把有限的 worker 资源低效占满。
优化握手速度,让连接更快“转正”
缩短单次握手耗时,是最直接缓解资源滞留的方式:
- 强制启用 TLS 1.3:它默认支持 1-RTT 完整握手和 0-RTT 恢复,比 TLS 1.2 的 2-RTT 快得多。配置为
ssl_protocols TLSv1.3;(可选加 TLSv1.2 兼容) - 优先使用 ECDHE 密钥交换 + ECDSA 或 Ed25519 证书:相比 RSA,椭圆曲线运算快一个数量级,大幅降低 CPU 解密开销
- 禁用老旧密码套件:移除
SSLv3、TLSv1.0、TLSv1.1及RC4、3DES等低效算法,避免协商退化
提升会话复用率,跳过大部分握手
让绝大多数请求走复用路径,彻底绕过密钥交换和证书验证:
- 开启共享会话缓存:
ssl_session_cache shared:SSL:10m;(所有 worker 共享,10MB 约存 4 万会话) - 启用 session ticket 并轮换密钥:
ssl_session_tickets on;+ssl_session_ticket_key /path/to/ticket.key;(支持跨进程/重启复用) - 设合理超时:
ssl_session_timeout 4h;(太短复用率低,太长浪费内存;公网建议 2–4 小时)
卸载阻塞操作,释放 worker 主线程
把耗时的证书验证等同步任务剥离出事件循环:
- 开启异步 OCSP Stapling:
ssl_stapling on;+ssl_stapling_verify on;,由 worker 异步查询并缓存吊销状态,不再每次握手都阻塞等待 - 若系统支持 kTLS(Linux 4.13+),启用内核 TLS 卸载:
ssl_conf_command Options -ktls;(需 OpenSSL ≥ 3.0),将部分加密运算交由内核完成 - CPU 绑定 worker 进程:
worker_cpu_affinity auto;,减少上下文切换,提升密码运算局部性
设置合理握手超时,及时清理“僵尸连接”
防止慢速攻击或异常客户端长期霸占连接槽位:
- 全局或按 server 设置:
ssl_handshake_timeout 15s;(公网推荐 15–30 秒;内网可控环境可设 5–10 秒) - 该值绝不可 ≤ 2 秒——会误杀高延迟用户,且对真实攻击防护效果极弱
- 配合
multi_accept on;和足够大的worker_connections(需与系统ulimit -n匹配),避免 accept 队列积压


















