proxy_ssl_ciphers专门控制Nginx与后端HTTPS服务器建立TLS连接时的加密套件,仅在location或server块中配合proxy_pass https://使用,需协同proxy_ssl_protocols等指令生效,不作用于客户端到Nginx的连接。

proxy_ssl_ciphers 用于控制 Nginx 作为反向代理时,与后端 HTTPS 服务器(即“回源”目标)建立 TLS 连接所使用的加密套件,它不作用于客户端到 Nginx 的连接。要匹配内网合规要求(如等保、金融行业 TLS 最低版本与禁用弱算法),需在 location 或 server 块中显式配置,并与 proxy_ssl_protocols、proxy_ssl_verify 等协同生效。
明确作用范围与生效前提
该指令仅在以下条件下起效:
- 必须和
proxy_pass https://...出现在同一作用域(如location /api { ... }内) - 若
proxy_pass http://,则整个proxy_ssl_*系列指令被忽略 - 不继承自
http块,每个需要 HTTPS 回源的 location 都需单独配置 - 需配合
proxy_ssl_protocols TLSv1.2 TLSv1.3;显式限定协议版本,否则默认可能包含 TLS 1.0/1.1
按内网合规要求设置强套件优先级
常见内网合规基线(如等保2.0三级、金融行业指南)要求禁用 RC4、NULL、EXPORT、SHA1、TLS 1.0/1.1,强制启用前向保密(PFS)和 AEAD 加密模式。推荐写法示例:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
proxy_ssl_protocols TLSv1.2 TLSv1.3; proxy_ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; proxy_ssl_ecdh_curve prime256v1; # 或 secp384r1,匹配后端支持能力
- 所有套件以
ECDHE开头,确保前向保密 - 仅保留
AES-GCM或ChaCha20-Poly1305类 AEAD 套件,禁用 CBC 模式 - 避免使用
SHA256以外的摘要算法(如SHA1) - 顺序即优先级:Nginx 按列表从左到右尝试协商,把最安全、最兼容的放前面
配合证书校验强化回源链路可信性
仅加密不够,还需验证后端身份,防止中间人攻击或误连测试环境:
- 启用严格证书校验:
proxy_ssl_verify on; - 指定受信任的 CA 根证书路径:
proxy_ssl_trusted_certificate /etc/nginx/certs/upstream-ca.crt; - 可选:校验证书域名(若后端使用标准域名而非 IP):
proxy_ssl_verify_depth 2;和proxy_ssl_name "backend.internal.example.com"; - 若后端证书由私有 CA 签发,务必确保
upstream-ca.crt包含完整信任链(含中间 CA)
验证与调试关键点
配置完成后,需实际验证是否生效:
- 用
openssl s_client -connect upstream-host:443 -tls1_2手动测试后端是否支持预期套件 - 在 Nginx error log 中开启 debug 日志:
error_log /var/log/nginx/error.log debug;,搜索SSL_do_handshake相关行,确认协商出的套件名 - 注意:若后端不支持你指定的任一套件,连接将失败并报
SSL_do_handshake() failed,此时需调整proxy_ssl_ciphers列表兼容性 - 可搭配
proxy_ssl_session_reuse off;排查会话复用干扰

















