启用 ssl_conf_command Options -PrioritizeChaCha 可让 TLSv1.3 握手优先选择 ChaCha20-Poly1305,显著降低旧移动设备解密能耗;需确保 OpenSSL ≥1.1.1、Nginx 配置含 TLSv1.3 且指令置于 server 块内。

用 ssl_conf_command Options -PrioritizeChaCha 优化移动端解密能耗,核心是让不支持 AES-NI 指令集的旧手机(比如 Android 4.4–9、iOS 10–12)在 TLSv1.3 握手中优先选中 ChaCha20-Poly1305 套件——它纯靠软件实现,比 AES-GCM 在弱 CPU 上快 2–3 倍,自然降低 CPU 占用和发热。
必须启用 TLSv1.3 才起作用
这个指令只在 TLSv1.3 协商阶段生效。TLSv1.2 不会触发 ChaCha 优先逻辑,哪怕客户端支持 ChaCha20,OpenSSL 也不会重排顺序。
-
配置中要明确包含 TLSv1.3:例如
ssl_protocols TLSv1.2 TLSv1.3;,不能只写TLSv1.2 - 如果后端或 CDN 强制降级到 TLSv1.2(比如某些老旧 WAF 规则),该指令完全无效
- 可通过
curl -Iv https://yoursite.com查看实际协商版本,确认是否落到 TLSv1.3
正确写法与位置
指令必须放在 server 块内,且带减号前缀:
- ✅ 正确:
ssl_conf_command Options -PrioritizeChaCha; - ❌ 错误:
ssl_conf_command Options PrioritizeChaCha;(少减号会报错) - ❌ 错误:写在
http或location块里(Nginx 不识别)
不需要改 ssl_ciphers,但得确保 OpenSSL 版本够新
ChaCha20-Poly1305 是 TLSv1.3 的标准套件,OpenSSL 1.1.1+ 默认内置,Nginx 无需额外声明或调整 ssl_ciphers。
- 检查 OpenSSL 版本:
nginx -V 2>&1 | grep -o 'OpenSSL [0-9.]\+' - 若输出是
OpenSSL 1.0.2或更低,升级 Nginx 或系统 OpenSSL 是前提 -
ssl_ciphers只影响 TLSv1.2,对 TLSv1.3 套件列表无任何控制力
搭配 ssl_early_data 可进一步提升弱网体验
在开启 0-RTT 的场景下,-PrioritizeChaCha 能提高移动端首次请求命中 ChaCha 套件的概率,减少握手延迟和加解密开销。
- 加上
ssl_early_data on;后,0-RTT 请求更可能落在 ChaCha 路径上 - 注意:后端必须识别
Early-Data: 1请求头并做幂等/重放防护,Nginx 本身不处理 - 实测中,Android Chrome 和 iOS Safari 在弱信号下对 ChaCha 的协商成功率明显高于 AES-GCM


















