要跳过 Nginx 反向代理对后端 HTTPS 的证书验证,需在 upstream 或 location 块中设置 proxy_ssl_verify off,并确保 proxy_pass 使用 https:// 协议、配置 proxy_ssl_protocols 等基础 SSL 参数。

在 Nginx 作为反向代理访问后端 HTTPS 接口时,若后端使用的是自签名证书、过期证书或域名不匹配的证书,Nginx 默认会拒绝建立 TLS 连接并返回 502 Bad Gateway(错误日志中常见 SSL_do_handshake() failed 或 certificate has expired)。要跳过证书验证,核心是配置上游连接的 SSL 参数,而非客户端到 Nginx 的连接。
启用 proxy_ssl_verify 并设为 off
这是最关键的一步。Nginx 默认开启证书校验(proxy_ssl_verify on),必须显式关闭:
- 在
location或upstream块中添加proxy_ssl_verify off; - 注意:该指令仅影响 Nginx 主动发起的上游 HTTPS 连接(即反代目标),不影响客户端访问 Nginx 的证书验证
补充必要的 SSL 协议与证书信任配置
即使跳过验证,Nginx 仍需基础 SSL 设置才能完成握手:
-
proxy_ssl_protocols TLSv1.2 TLSv1.3;(推荐,避免老旧协议) -
proxy_ssl_ciphers DEFAULT;或指定兼容 cipher suite(如后端较旧,可放宽为ECDHE+AESGCM:HIGH:!NULL:!aNULL:!EXPORT:!DES:!MD5:!PSK:!RC4) -
proxy_ssl_trusted_certificate可省略(因已禁用验证),但若保留该指令,路径必须真实存在且可读,否则可能报错
确保 proxy_pass 使用 HTTPS 协议且地址正确
确认 upstream 地址以 https:// 开头,并检查 DNS 解析与网络连通性:
- 错误写法:
proxy_pass http://backend;(会走 HTTP,不触发证书校验逻辑) - 正确写法:
proxy_pass https://backend;(触发proxy_ssl_*系列指令) - 若后端监听 IP+端口(如
https://10.0.1.5:8443),确保该地址可被 Nginx 访问且端口开放
完整配置示例
以下是一个最小可用配置片段:
upstream api_backend {
server 10.0.1.5:8443;
}
<p>server {
listen 80;
location /api/ {
proxy_pass <a href="https://www.php.cn/link/602852260c81b93a01693165f1ae9dd7">https://www.php.cn/link/602852260c81b93a01693165f1ae9dd7</a>;
proxy_ssl_verify off;
proxy_ssl_protocols TLSv1.2 TLSv1.3;
proxy_ssl_ciphers DEFAULT;</p><pre class="brush:php;toolbar:false;"> # 其他常规代理头
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}}
修改后执行 nginx -t && nginx -s reload 生效。注意:跳过证书验证会降低安全性,仅限测试或内网可信环境使用。











