nginx反向代理https后端时,必须同时配置proxy_ssl_verify on、proxy_ssl_trusted_certificate、proxy_ssl_name和proxy_ssl_server_name四项指令于同一location块内,并确保ca证书文件纯净且格式正确,否则校验失效或返回502。

要让 Nginx 在反向代理 HTTPS 后端时真正验证其证书是否由可信三方 CA 签发,proxy_ssl_trusted_certificate 是信任锚点,但单独配置它没用——必须和验证开关、域名匹配、SNI 发送这三项协同生效,且文件内容必须纯净。
信任证书文件必须只含根/中间 CA,格式严格
该指令指向的文件(如 /etc/nginx/ssl/upstream-ca.crt)只能是 PEM 格式的 CA 证书集合:
- 只包含根证书和中间证书,按“根 → 中间1 → 中间2”顺序拼接,每张证书以
-----BEGIN CERTIFICATE-----开头、-----END CERTIFICATE-----结尾 - 禁止混入私钥、终端证书(即后端自己的
.crt或fullchain.pem) - 证书之间不能有空行或多余字符;推荐权限设为
644 - 验证是否合法:运行
openssl pkcs7 -print_certs -in /etc/nginx/ssl/upstream-ca.crt -noout,能正常输出证书信息即通过
四项指令必须同处一个 location 块内
缺一不可,否则会返回 502 错误或静默跳过校验:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
-
proxy_ssl_verify on;—— 启用上游证书校验(默认是 off) -
proxy_ssl_trusted_certificate /etc/nginx/ssl/upstream-ca.crt;—— 指定你信任的 CA 锚点 -
proxy_ssl_name "api.example.com";—— 显式匹配证书中的 SAN,尤其当proxy_pass使用变量或 IP 时必须设置 -
proxy_ssl_server_name on;—— 强制发送 SNI,对接云服务、泛域名或 mTLS 后端时必需
缓存与 TLS 复用场景需额外加固
启用 proxy_cache 后,Nginx 可能复用 TLS session 或响应体,但证书校验必须每次连接都真实执行:
-
proxy_ssl_session_reuse off;—— 关闭 TLS session 复用,避免旧 session 携带异常证书状态 -
proxy_ssl_verify_depth 3;—— 默认只验 1 层(终端→根),多数三方服务返回终端+一级中间证书,设为 3 更稳妥 -
proxy_ssl_protocols TLSv1.2 TLSv1.3;—— 禁用 TLSv1.0/1.1,防止协议降级干扰校验逻辑
不建议在 http 或 server 块中全局配置这些 proxy_ssl_* 指令
它们仅在 location 或 upstream 上下文中生效。例如正确写法:
location /api/ {<br> proxy_pass https://backend.internal;<br> proxy_ssl_verify on;<br> proxy_ssl_trusted_certificate /etc/nginx/ssl/ca-bundle.pem;<br> proxy_ssl_name "backend.internal";<br> proxy_ssl_server_name on;<br> proxy_ssl_verify_depth 3;<br> proxy_ssl_session_reuse off;<br> proxy_ssl_protocols TLSv1.2 TLSv1.3;<br>}










