Nginx反向代理安全连接云服务需同时启用proxy_ssl_verify、proxy_ssl_trusted_certificate、proxy_ssl_name和proxy_ssl_server_name四条指令,且CA证书文件须仅含根/中间CA、格式规范、无私钥或终端证书。

要让 Nginx 反向代理安全连接外部云服务(如 AWS S3、Cloudflare R2、阿里云 OSS、Azure Blob 等),proxy_ssl_trusted_certificate 是信任链校验的关键一环,但它必须和其他指令协同工作才能真正生效——单独配置它不会触发任何验证。
信任证书文件必须只含权威 CA,不能混入私钥或终端证书
该指令指向的 PEM 文件是 Nginx 验证云服务证书的“信任锚”,必须严格满足:
- 仅包含根 CA 和中间 CA 证书(例如 Mozilla 维护的
/etc/ssl/certs/ca-certificates.crt或系统级 bundle) - 每张证书以
-----BEGIN CERTIFICATE-----开头、-----END CERTIFICATE-----结尾,之间无空行、无注释、无 Windows 回车符(\r\n) - 绝对不要放入云服务返回的终端证书(如
s3.us-east-1.amazonaws.com.crt)、你的私钥、或 fullchain.pem 中的服务端证书 - 可用命令快速验证:
openssl crl2pkcs7 -nocrl -certfile ca-bundle.pem | openssl pkcs7 -print_certs -noout,能输出证书信息即合规
必须配套启用四条核心指令
仅写 proxy_ssl_trusted_certificate 不会启动校验。以下四条需在同一个 location 块中同时存在:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
-
proxy_ssl_verify on;—— 明确打开上游证书校验开关(默认是 off) -
proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;—— 指向你信任的 CA 包 -
proxy_ssl_name $host;—— 动态传入用户原始请求的域名(如files.example.com),用于匹配云服务证书中的 SAN;若后端是泛域名(如*.s3.amazonaws.com),此项必不可少 -
proxy_ssl_server_name on;—— 启用 TLS SNI,确保握手时发送正确的域名,否则云服务无法返回对应证书
增强鲁棒性的推荐补充配置
云服务证书链常含一级中间 CA,且对协议敏感,建议追加:
-
proxy_ssl_verify_depth 2;—— 默认只验 1 层(终端 → 根),设为 2 可覆盖常见云厂商链结构 -
proxy_ssl_protocols TLSv1.2 TLSv1.3;—— 明确禁用 TLSv1.0/1.1,防止降级攻击干扰校验逻辑 -
proxy_ssl_session_reuse off;—— 关闭 TLS session 复用,避免旧 session 携带异常状态影响新连接
特别注意 Host 头被覆盖的情况
如果前端有 CDN、WAF 或 API 网关,它们回源时常重写 Host 头(如改成 origin.example.com),导致 $host 失真:
- 改用
proxy_ssl_name $http_x_forwarded_host; - 并确保上游已透传原始域名:
proxy_set_header X-Forwarded-Host $host; - 若不可控,可固定为云服务官方域名(如
proxy_ssl_name s3.us-west-2.amazonaws.com;),但需确认其证书 SAN 包含该值

















