开启 ssl_prefer_server_ciphers on 可强制 Nginx 优先使用服务端配置的安全 cipher suite,避免客户端协商弱算法;但必须配合禁用不安全算法、启用 ECDHE+AES-GCM/ChaCha20、限定 TLSv1.2+ 等整体策略才有效。

启用 ssl_prefer_server_ciphers on 能提升 HTTPS 安全性,但需配合合理的 cipher suite 配置才真正有效。
为什么需要开启 ssl_prefer_server_ciphers
默认情况下,Nginx 会接受客户端提出的任意加密套件(cipher suite),包括老旧、弱强度的选项(如 RC4、DES、SSLv3 相关套件)。开启该指令后,Nginx 优先采用自己配置的、更安全的 cipher list 顺序,而非客户端偏好,从而避免协商出不安全的组合。
必须搭配合理的 ssl_ciphers 配置
仅开启 ssl_prefer_server_ciphers on 不够,若 ssl_ciphers 本身包含弱算法或顺序混乱,仍可能降级到不安全套件。推荐使用现代、前向保密(PFS)优先的配置:
- 明确禁用已知不安全算法:移除
RC4、MD5、SHA1(在签名中)、NULL、EXPORT、DES、3DES - 优先启用 ECDHE 密钥交换 + AES-GCM 或 ChaCha20 加密,例如:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305; - 配合
ssl_ecdh_curve secp384r1:prime256v1;提升 ECDHE 性能与兼容性
注意 TLS 版本协同控制
仅靠 cipher 控制不够,还需限制协议版本:
- 禁用过时协议:
ssl_protocols TLSv1.2 TLSv1.3;(TLSv1.0 和 TLSv1.1 已被主流浏览器弃用且存在漏洞) - TLSv1.3 自动忽略
ssl_ciphers和ssl_prefer_server_ciphers,但该指令对 TLSv1.2 及以下仍生效,因此仍需保留
验证是否生效
配置完成后务必测试:
- 用
openssl s_client -connect yourdomain.com:443 -tls1_2查看协商出的 cipher,确认是否为预期强套件 - 使用 SSL Labs Test 全面评估评级(目标 A+)
- 检查 Nginx 配置语法:
nginx -t,重载:nginx -s reload
这个设置本身不复杂,但容易被忽略或孤立配置。关键是把它当作 cipher 策略控制的一环,和协议版本、密钥交换方式、证书参数一起整体优化。










