Nginx作为HTTPS客户端连接后端时证书验证失败,主因是proxy_ssl_verify on已启用但proxy_ssl_trusted_certificate、proxy_ssl_server_name on、proxy_ssl_name四项配置不全或不匹配。

这类报错说明 Nginx 在作为 HTTPS 客户端连接后端(upstream)时,证书验证失败。核心不是证书本身“错”,而是 Nginx 无法信任它——原因集中在验证开关、信任锚、SNI 和域名匹配这四个环节。
确认 proxy_ssl_verify 是否真正启用
默认值是 off,即使配置了 proxy_pass https://,Nginx 也不会校验后端证书,也就不会报这个错误。所以看到该提示,说明你已显式开启了验证,但配置不完整。
- 检查是否在
location或upstream块内写了proxy_ssl_verify on;(写在http或server块中无效) - 若没写这行,却出现该错误,可能是某处继承了上级配置,或使用了第三方模块强制校验
检查 proxy_ssl_trusted_certificate 文件是否有效
这个文件是 Nginx 验证后端证书的“信任根”,不是你的站点证书,也不是 fullchain.pem。
基于 AIOZ Stream API 的免费音频上传技能,通过三步流程(Create → Upload Part → Complete)将本地音频文件上传至 AIOZ 流媒体平台。支持默认快速上传方式,使用默认编码配置,上传完成后返回 HLS 流媒体播放链接。使用 API Key (stream-publ...)进行认证。
- 路径必须正确,且 Nginx 工作进程(如
www-data)有读取权限(建议644) - 内容只能是 PEM 格式的 CA 证书(根 + 中间),每段以
-----BEGIN CERTIFICATE-----开头 - 用命令验证:
openssl x509 -in /path/to/trusted.crt -text -noout | grep "Subject:",应显示可信 CA 名称 - 常见误用:混入私钥、终端证书、或直接用了系统
ca-certificates.crt却未更新(尤其 Docker 容器内)
验证 SNI 和 proxy_ssl_name 是否匹配后端证书
如果后端是多域名共用 IP 的 HTTPS 服务(如泛域名网关、MinIO、云 API),不传 SNI 就拿不到正确证书,必然触发验证失败。
- 必须开启:
proxy_ssl_server_name on; - 必须指定目标域名:
proxy_ssl_name "api.example.com";(固定后端)或proxy_ssl_name $http_x_forwarded_host;(CDN 场景) -
proxy_ssl_name的值必须与后端证书的 SAN(Subject Alternative Name)完全一致:大小写、通配符(*.example.com)、是否含www都要核对 - 快速验证:用
curl -v https://api.example.com:port查看返回证书的 SAN 字段
临时绕过验证快速定位问题
仅用于排查,不可留在线上。
- 在对应
location中加一行:proxy_ssl_verify off; - 如果此时请求恢复正常,就 100% 确认是信任链或 SNI/域名匹配问题
- 恢复
on后,逐项检查上述三项配置,避免漏掉任一环节










