Nginx 的 worker_processes 不直接调用硬件加速卡,仅控制 CPU 进程数;启用 QAT 等加速需依赖 OpenSSL 引擎、Nginx 重编译及 ssl_engine 等配置,worker_processes 应设为物理核数并绑定 CPU 以协同优化。

Nginx 本身不直接支持通过 worker_processes 配置来调用硬件加速卡(如 Intel QAT、AMD PSP、NVIDIA DOCA 或 ASIC 加速卡)实现算力卸载。worker_processes 控制的是CPU 上的进程数量与调度粒度,它面向通用计算资源(CPU 核心),而非专用加速设备。硬件加速卡的算力卸载需依赖底层驱动 + 内核模块 + OpenSSL 引擎 + Nginx 编译集成,worker_processes 只是协同配置中的一环,不能“直接配合”加速卡工作。
要真正启用硬件加速(如 TLS 加解密、gzip 压缩卸载),关键路径是:
- ✅ 加速能力必须由 OpenSSL(或内核 crypto API)暴露给上层应用
- ✅ Nginx 需静态/动态链接支持该引擎的 OpenSSL 版本
- ✅ 运行时通过
ssl_engine、ssl_protocols等指令启用,而非靠 worker 数量
一、硬件加速卡接入的前提条件
-
确认加速卡已识别并驱动就绪
lspci | grep -i qat # Intel QAT lsmod | grep qat # 检查 qat_dh895xcc/qat_4xxx 等模块 cat /proc/qat_devs # QAT 设备状态
-
安装配套 OpenSSL 引擎
- Intel QAT:需编译
qat_engine,并确保 OpenSSLconfig启用了engine和对应硬件支持 - 验证引擎可用:
openssl engine -t -c qat # 应输出:(qat) Reference implementation of QAT crypto engine [available]
- Intel QAT:需编译
-
重新编译 Nginx(关键!)
Nginx 默认不链接外部 OpenSSL 引擎。必须指定自定义 OpenSSL 路径,并启用--with-http_ssl_module:./configure \ --with-openssl=/path/to/openssl-with-qat \ --with-http_ssl_module \ --with-stream_ssl_module \ ... make && make install
二、Nginx 中启用硬件加速的配置项(非 worker_processes)
在 nginx.conf 的 http 或 stream 块中添加:
# 启用 QAT 引擎(需 OpenSSL 已加载) ssl_engine qat; # 强制使用硬件加速的密码套件(QAT 支持 AES-GCM、RSA、ECDSA 等) ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers off; # 开启 OCSP Stapling(减少握手延迟,间接提升卸载效率) ssl_stapling on; ssl_stapling_verify on; # 可选:限制仅在支持硬件加速的 worker 上启用(需配合 CPU 绑定) # 注意:这不是自动的,需靠操作系统亲和性隔离 + 引擎初始化逻辑保障
⚠️
ssl_engine指令仅在 Nginx ≥ 1.15.5 且 OpenSSL ≥ 1.1.1(带 engine 支持)时有效。旧版本需打补丁或改用ngx_http_ssl_engine_module第三方模块。
三、worker_processes 的合理配合方式
虽然它不“驱动”加速卡,但错误设置会削弱卸载效果:
-
不要盲目设高:每个 worker 进程启动时会初始化 OpenSSL 引擎上下文。若
worker_processes远超物理核数(尤其在启用 HT 的机器上),会导致引擎实例争抢 QAT 队列资源,反而降低吞吐。 -
推荐值:设为 物理 CPU 核数(不是逻辑核),例如 16 物理核 →
worker_processes 16;
并严格绑定:worker_cpu_affinity auto;(Nginx ≥ 1.9.10),避免跨 NUMA 节点访问 QAT 设备。 -
容器/云环境特别注意:若只分配了 4 vCPU,即使宿主机有 QAT 卡,也必须设
worker_processes 4;,否则部分 worker 无法获得设备句柄。
四、验证是否真正卸载成功
-
检查 OpenSSL 引擎调用日志(需 Nginx 编译时加
--with-debug)error_log /var/log/nginx/error.log debug;
启动后搜索
qat、engine、async关键字。 -
监控 QAT 设备利用率
qat_ctl status # 查看队列负载、加密请求数 cat /sys/class/qat/*/stats/* # 原始计数器
-
对比压测指标
使用wrk -t16 -c4000 -d30s https://test/分别测试:- 关闭
ssl_engine时的 CPU us% 与 QPS - 开启后相同并发下的 CPU us%(应明显下降)、QPS(应上升 20%~50%+)
- 关闭
不复杂但容易忽略:worker_processes 是调度骨架,硬件加速是肌肉。骨架搭歪了,再强的肌肉也使不上劲。真正起效的永远是 驱动→引擎→OpenSSL→Nginx 编译→运行时指令 这条链路,worker_processes 只负责让这条链路在合适的 CPU 上稳定跑起来。











