Nginx 不支持在 nginx.conf 中直接配置 ssl_engine 指令,因其官方模块未预留 OpenSSL engine 控制接口;需通过编译定制 OpenSSL、配置 openssl.cnf、启用异步模式三步实现硬件加速。

不能在 nginx.conf 里直接写 ssl_engine qat 或类似指令来开启硬件加速——Nginx 官方配置语法根本不支持 ssl_engine 这个指令,这是最常被误解的一点。
为什么 nginx.conf 里配不了 ssl_engine
Nginx 的 SSL 功能由 ngx_http_ssl_module 模块提供,它只暴露了 ssl_certificate、ssl_protocols 等基础配置项,但没有预留任何接口去控制 OpenSSL 的 engine 加载行为。引擎的注册、初始化和调用完全由底层 OpenSSL 库自主管理,Nginx 源码中既未调用 ENGINE_load_builtin_engines(),也未读取或解析 ssl_engine 配置。所以无论你把它放在全局块、http 块还是 server 块,Nginx 都会静默忽略。
真正生效的三步集成路径
要让 Nginx 实际跑在 Intel QAT、AES-NI 或其他硬件加速器上,必须在编译与系统层完成闭环:
-
编译时绑定带引擎的 OpenSSL:先用 QAT-Engine(或 cryptodev-engine)编译一个定制版 OpenSSL(如 OpenSSL 1.1.1u 或 3.0.x),再用这个 OpenSSL 编译 Nginx,命令中需指定
--with-openssl=/path/to/qat-openssl; -
配置 openssl.cnf 启用引擎:编辑
/etc/ssl/openssl.cnf,加入 engine 段落,例如启用 QAT:
[openssl_def]
engines = engine_section
[engine_section]
qat = qat_section
[qat_section]
dynamic_path = /usr/lib64/engines-1.1/qat.so
default_algorithms = ALL -
验证是否加载成功:启动 Nginx 后,运行
openssl engine -t -c qat(确保使用的是同版本 OpenSSL),看到[ available ]才算就绪;也可执行cat /proc/$(pgrep nginx)/maps | grep qat查进程内存映射中是否存在qat.so。
搭配异步模式效果更明显
仅启用硬件引擎还不够,若想把 QAT 的并发能力真正释放出来,建议同时开启 OpenSSL 异步支持:
- 编译 Nginx 时加上
--with-openssl-async选项; - 在
nginx.conf的 http 或 server 块中添加ssl_async on;; - 异步模式会让加密计算脱离主线程,在 QAT 完成的同时,Nginx 工作进程可继续处理其他请求,避免阻塞,QPS 提升通常可达 2–5 倍(视负载和 QAT 卡型号而定)。
别忘了基础硬件确认
启用前快速确认底层是否具备条件:
- CPU 支持 AES-NI?运行
grep -o aes /proc/cpuinfo | wc -l,输出大于 0 即可; - QAT 卡驱动已安装且设备节点可见?检查
lspci | grep QAT和ls /dev/qat_adf*; - OpenSSL 版本 ≥ 1.1.1?运行
openssl version,低于此版本不支持 provider 机制与 auto-loading。











