必须设置 proxy_ssl_verify off 和 proxy_ssl_server_name on,并使用 https:// 协议的 proxy_pass;二者缺一不可,否则易报 502 或 SSL 握手失败,且指令仅在 location 或 upstream 块中生效。

要让 Nginx 用 proxy_pass 转发到 HTTPS 后端时忽略证书校验,关键不是“自动跳过”,而是必须显式关闭验证并配齐 TLS 握手基础参数。只写 https:// 不起作用,缺任何一项都可能报 502 或握手失败。
必须设置的两个核心指令
这两项缺一不可,否则即使写了 https://,Nginx 仍可能因 SNI 缺失或校验逻辑异常而连接失败:
-
关闭证书验证:添加
proxy_ssl_verify off;—— 这是跳过自签名、过期、域名不匹配等所有校验的开关 -
启用 SNI 支持:添加
proxy_ssl_server_name on;—— 否则后端无法识别请求目标主机名,尤其在泛域名或共用 IP 的场景下极易返回错误证书或拒绝连接
proxy_pass 必须使用 https:// 协议
协议必须明确,且与后端实际监听方式一致:
- ✅ 正确:
proxy_pass https://backend.example.com:8443/;或https://10.0.1.5:8443/; - ❌ 错误:
proxy_pass http://backend.example.com;(走明文,不触发 SSL 配置) - ⚠️ 注意:若用 IP 地址,需确认后端证书的 SAN 或 CN 包含该 IP;否则即使关了校验,SNI 不匹配也可能被后端拒绝
建议补充的实用配置
避免常见副作用,提升稳定性和兼容性:
-
透传协议头:加上
proxy_set_header X-Forwarded-Proto $scheme;,让后端知道原始是 HTTPS,防止重定向错乱 -
调整超时值:HTTPS 握手比 HTTP 耗时,建议设为
proxy_connect_timeout 60s;、proxy_read_timeout 120s; -
基础请求头:至少保留
Host、X-Real-IP和X-Forwarded-For,保证后端日志和路由准确
配置位置和生效范围
这些指令只能在 location 或 upstream 块中生效:
- ✅ 可以写在
location /api/ { ... }内部 - ✅ 也可以定义在
upstream backend { server https://...; }中(需配合proxy_pass引用) - ❌ 不能放在
server或http块顶层——会被忽略,导致配置无效


















