nginx 不支持 ssl_engine 指令,硬件加速需通过编译集成带引擎的 openssl 并配置 openssl.cnf 启用,再配合 ssl_async on 开启异步模式。

Nginx 本身不支持在 nginx.conf 中通过 ssl_engine 指令启用硬件加速——这个指令根本不存在于官方配置语法中,所有试图在 http 块、server 块甚至全局块里写 ssl_engine qat 或 ssl_engine auto 的做法,都会被 Nginx 静默忽略。
真正让 Nginx 使用 Intel QAT、AES-NI 或 cryptodev 等硬件加速器,必须绕过配置层,在 OpenSSL 底层和编译环节完成集成。
编译时绑定带引擎的 OpenSSL
Nginx 的 SSL 功能完全依赖所链接的 OpenSSL 库,它不会自己加载或初始化 engine。因此第一步是:
- 先编译一个已集成目标硬件引擎(如 QAT-Engine 或 cryptodev-engine)的 OpenSSL 版本(推荐 1.1.1u 或 3.0.x);
- 再用这个定制版 OpenSSL 编译 Nginx,命令中明确指定路径:
./configure \ --with-http_ssl_module \ --with-openssl=/path/to/qat-openssl \ --with-openssl-async # 如需异步支持,必须加此项
配置 openssl.cnf 启用引擎
OpenSSL 运行时是否加载 engine,取决于其配置文件(通常是 /etc/ssl/openssl.cnf)。需在其中添加对应段落,例如启用 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
注意路径要与实际 .so 文件位置一致,OpenSSL 1.1.x 和 3.x 的引擎目录可能为 engines-1.1 或 engines-3。
验证引擎是否生效
启动 Nginx 后,不能只看配置有没有报错,要实测进程是否加载了硬件模块:
- 确保使用的是同版本 OpenSSL 执行验证:
openssl engine -t -c qat
输出含
[ available ]表示引擎注册成功; - 查看 Nginx 主进程内存映射:
cat /proc/$(pgrep nginx)/maps | grep qat
有输出说明
.so已被加载进工作进程地址空间。
(可选但强烈推荐)开启异步模式
仅加载 engine 不足以发挥 QAT 并发优势。若编译时加了 --with-openssl-async,还需在 nginx.conf 中启用:
http {
ssl_async on; # 注意:这是唯一有效的“ssl_*”相关异步开关
}
该设置会让 RSA/ECC 运算异步提交至 QAT 设备,Nginx 工作进程无需等待,QPS 提升通常达 2–5 倍。
不复杂但容易忽略。











