Nginx Worker进程通过会话复用、异步OCSP Stapling、现代密码套件、TLS 1.3及系统级优化(如CPU绑定、kTLS)降低SSL握手CPU开销并提升并发处理能力。

在Nginx多进程模型中,Worker进程本身不直接“加速”SSL握手,但通过合理配置与内核、硬件协同,可显著降低握手延迟、提升并发TLS处理能力。关键在于减少单次握手的CPU开销、避免阻塞,并充分利用多核并行性。
Worker进程如何参与SSL握手
Nginx每个Worker进程是单线程、事件驱动的,负责监听端口、接收连接、完成TCP三次握手后,独立处理该连接的TLS握手(包括密钥交换、证书验证、会话复用等)。由于无锁设计和epoll/kqueue高效调度,多个Worker可并行处理成千上万的并发SSL连接。
注意:SSL握手计算(如RSA解密、ECDHE密钥协商)由Worker进程同步执行,若未优化,高负载下易成为CPU瓶颈。
启用TLS会话复用,大幅减少完整握手次数
完整握手(Full Handshake)需2-RTT且含非对称运算;而会话复用(Session Resumption)可降为1-RTT甚至0-RTT(配合PSK),极大减轻Worker CPU压力。
-
使用session cache共享内存:所有Worker共用同一块共享内存缓存会话票证(ticket),避免各Worker本地缓存不一致
ssl_session_cache shared:SSL:10m;(10MB可存储约4万会话) -
启用session ticket并加密共享密钥:更高效,支持跨Worker/重启复用
ssl_session_tickets on;
ssl_session_ticket_key /etc/nginx/ticket.key;(建议定期轮换密钥) -
设置合理超时时间:过长浪费内存,过短复用率低
ssl_session_timeout 4h;
卸载CPU密集型操作,释放Worker处理能力
将耗时的密码学运算从Worker主线程中剥离,是提升吞吐的关键:
-
启用OCSP Stapling:证书吊销检查由Worker异步完成并缓存结果,避免每次握手都远程查询OCSP响应器
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ca-bundle.crt; -
使用现代、快速的密码套件:禁用RSA密钥交换(需服务端解密),优先选ECDHE+AES-GCM或ChaCha20-Poly1305
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...; - 开启TLS 1.3(推荐):1-RTT握手、废除RSA密钥交换、内置前向安全,Worker握手路径更短、更可靠
配合系统与硬件进一步优化
Nginx Worker性能还受限于底层环境:
-
绑定Worker到专用CPU核心:减少上下文切换,提升缓存局部性
worker_cpu_affinity auto; 或手动指定(如 0001 0010 0100 1000) -
增大连接队列与文件描述符限制:避免握手连接被内核丢弃
worker_rlimit_nofile 65536; 并同步调高系统级 fs.file-max 和 net.core.somaxconn - 启用内核TLS(kTLS)支持(Linux 4.17+):当OpenSSL ≥1.1.1且内核配置启用时,部分TLS记录加解密可由内核绕过用户态,Worker仅处理握手逻辑










