proxy_ssl_trusted_certificate需与proxy_ssl_verify on、proxy_ssl_name、proxy_ssl_server_name on四项指令共存于location或upstream块中,且所指pem文件仅含根/中间ca证书、无私钥或终端证书,顺序自顶向下、无空行,方可生效。

proxy_ssl_trusted_certificate 本身不“挂载”证书链,它只是告诉 Nginx:用哪个文件里的 CA 证书去验证上游服务的身份。真正起作用的是这个文件的内容是否合规,以及是否和其他三项指令协同启用。
要让它生效,必须满足两个前提:
✅ 文件内容正确(纯净、顺序对、格式规范)
✅ 四项指令共存于同一作用域(location 或 upstream 块中)
信任证书文件怎么准备?
该 PEM 文件只能包含根 CA 和中间 CA 的公钥证书,不能有私钥、不能有你的服务器证书、也不能有后端的终端证书(比如 fullchain.pem 或 server.crt 直接挪用会失败)。
- 每张证书以
-----BEGIN CERTIFICATE-----开头、-----END CERTIFICATE-----结尾 - 多个证书拼接时,按“自顶向下”顺序:根证书在最前,中间证书依次跟在后面
- 证书之间不能有空行、空格、注释或 Windows 换行符(\r\n)
- 推荐路径:
/etc/nginx/ssl/trusted_ca.pem(自建)或复用系统证书包/etc/ssl/certs/ca-certificates.crt
验证是否合法:
openssl pkcs7 -print_certs -in /etc/nginx/ssl/trusted_ca.pem -noout
能正常输出证书信息,说明格式正确。
四项指令必须一起写,缺一不可
只写 proxy_ssl_trusted_certificate 不会触发任何校验,Nginx 默认关闭上游证书验证。
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
以下四条需同时出现在同一个 location 或 upstream 块中:
-
proxy_ssl_verify on;—— 打开验证总开关(默认 off) -
proxy_ssl_trusted_certificate /path/to/trusted_ca.pem;—— 指定信任锚文件 -
proxy_ssl_name "backend.example.com";—— 显式声明期望域名,用于匹配证书中的 SAN 字段;若proxy_pass用 IP 或变量(如https://$host),此项不可省略 -
proxy_ssl_server_name on;—— 启用 TLS SNI,确保握手时发送正确域名,对接云服务或多租户后端时关键
增强校验可靠性的建议配置
这些不是必需项,但在生产环境中推荐加上:
-
proxy_ssl_verify_depth 3;—— 默认只验证 1 层(终端 → 直接签发者),三方或私有 CA 链常含多级中间证书,设为 3 更稳妥 -
proxy_ssl_protocols TLSv1.2 TLSv1.3;—— 明确禁用老旧协议,避免降级干扰 -
proxy_ssl_session_reuse off;—— 关闭 TLS session 复用,防止缓存异常证书状态导致校验绕过
注意:所有 proxy_ssl_* 指令仅在 location 或 upstream 块中生效,不支持在 http 或 server 块中全局配置。
常见错误排查点
- 返回 502 错误?大概率是四条指令没配齐,或
proxy_ssl_verify没开 - 校验通过但连接失败?检查
proxy_ssl_name是否与后端证书的 SAN 完全一致(大小写、通配符、IP 地址都要匹配) - 提示 “unable to get local issuer certificate”?说明信任文件里缺了某一级中间 CA,用
openssl verify -CAfile trusted_ca.pem backend.crt可定位缺失环节
不复杂但容易忽略。










