关键在于OpenSSL是否正确识别并调用硬件加速:先查CPU支持(grep -o aes /proc/cpuinfo)、再验OpenSSL引擎可用(openssl engine -t -c),编译Nginx时需显式启用enable-engine和qat选项,配置中添加ssl_engine qat,并通过openssl speed和CPU占用率验证实效。

要让 Nginx 真正用上硬件加速卡(如 Intel QAT、AES-NI 或专用 SSL 卸载卡)来 Offload SSL 计算,关键不是“开了没”,而是“是否被 OpenSSL 正确识别并调用”。很多配置看似启用,实则加速未生效——CPU 仍在硬算 RSA/ECC/AES。
确认硬件加速已就绪
先验证底层支持,避免调优走偏:
- 查 CPU 是否支持 AES-NI:
grep -o aes /proc/cpuinfo | wc -l,输出大于 0 表示支持 - 查 OpenSSL 是否编译时启用了引擎支持:运行
openssl version -a,看输出中是否含enable-engine - 列出可用引擎:
openssl engine -t -c,若看到dynamic或qat且状态为[available],说明驱动和引擎已加载
编译 Nginx 时显式启用硬件加速支持
默认源码编译的 Nginx 不会自动链接 QAT 引擎或启用高级 OpenSSL 优化。必须在 configure 阶段指定:
- 使用系统 OpenSSL(推荐)并开启引擎:
--with-openssl-opt="enable-engine enable-qat" - 若使用 Intel QAT,还需添加:
--with-openssl-opt="no-asm enable-qat" --add-module=/path/to/ngx_qat_module - 确保
--with-http_ssl_module已启用,且不带--without-http_ssl_module
编译后可通过 nginx -V 2>&1 | grep -i engine 确认参数是否生效。
Nginx 配置中正确声明 ssl_engine
仅靠 OpenSSL 支持还不够,Nginx 必须在 SSL 上下文中明确调用引擎:
- 在
http{}或server{}块中添加:ssl_engine qat;(QAT 卡)或ssl_engine auto;(让 OpenSSL 自动选最佳,通常命中 AES-NI) - 注意:该指令只在 OpenSSL ≥ 1.1.1 且 Nginx ≥ 1.19.6 中有效;旧版本忽略此配置
- 搭配使用
ssl_ciphers优先 AES-GCM 类套件(如ECDHE-RSA-AES256-GCM-SHA384),这些算法才能被 AES-NI 加速
验证加速是否真实生效
配置完成后,不能只看 Nginx 启动成功——要测实际效果:
- 压测前执行:
openssl speed -evp aes-128-gcm,对比启用 QAT 前后的吞吐(单位 MB/s),提升 3–5 倍即为有效 - 运行
top -p $(pgrep nginx | head -1),观察单 worker 进程 CPU 占用是否明显下降(尤其在高 HTTPS 并发下) - 检查日志是否有引擎错误:
grep -i "engine\|qat" /var/log/nginx/error.log,出现failed to load engine说明路径或权限问题
硬件加速不是一配就灵,它依赖内核模块(如 qat_dh895xcc)、用户态服务(qat_service)、OpenSSL 引擎和 Nginx 四层协同。任一环节断链,SSL 就退回纯软件计算。


















