必须在 proxy_ssl_protocols 指令中显式配置 TLSv1.2 TLSv1.3,才能禁用不安全的 SSLv2/SSLv3/TLSv1.0/TLSv1.1;该指令专用于 Nginx 到上游服务器的 HTTPS 连接,需配合 proxy_ssl_ciphers 和实测验证。

proxy_ssl_protocols 用于控制 Nginx 作为反向代理时,与上游(后端)服务器建立 HTTPS 连接所允许使用的 TLS/SSL 协议版本。它不作用于客户端到 Nginx 的连接(那是 ssl_protocols 的职责),而是管“Nginx → 后端 HTTPS 服务”这段链路的安全握手。
为什么这个配置重要
旧协议如 SSLv2、SSLv3 和 TLS 1.0/1.1 存在已知漏洞(如 POODLE、BEAST),容易被攻击者利用。若 Nginx 仍允许与后端使用这些弱协议通信,即使前端启用了 TLS 1.3,整条链路的安全性也会被降级甚至击穿。
推荐的写法
应显式启用强协议,禁用所有已废弃版本:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
proxy_ssl_protocols TLSv1.2 TLSv1.3;- 不写该指令时,Nginx 默认值通常是
TLSv1 TLSv1.1 TLSv1.2(取决于编译时 OpenSSL 版本),这包含不安全的 TLS 1.0/1.1 - 明确排除
SSLv2、SSLv3、TLSv1、TLSv1.1是基本安全实践
配合 proxy_ssl_ciphers 使用
仅限制协议还不够,还需搭配强加密套件:
proxy_ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;- 避免使用
RC4、DES、3DES、MD5等已被淘汰的算法 - 建议启用
proxy_ssl_prefer_server_ciphers off;(默认),让客户端优先选择更优套件
验证是否生效
可通过 OpenSSL 命令模拟 Nginx 的上游行为测试:
-
openssl s_client -connect your-upstream.example.com:443 -tls1_2(应成功) -
openssl s_client -connect your-upstream.example.com:443 -tls1(应失败) - 同时检查 Nginx error log,若出现
SSL_do_handshake() failed且涉及协议不匹配,说明配置已起效并拦截了弱协商

















