要忽略Nginx反向代理后端HTTPS证书校验,必须显式配置proxy_ssl_verify off和proxy_ssl_server_name on,并确保proxy_pass使用https://协议;仅写https://不自动跳过验证,缺一不可,否则易报502或SSL握手失败。

直接在 proxy_pass 中写 https:// 并不能自动忽略证书校验,Nginx 默认仍会尝试验证后端 HTTPS 证书——但若不显式配置校验行为,实际可能静默跳过或因缺失关键参数而报错。要真正“忽略证书校验”,必须明确关闭验证,并配合必要基础设置,否则容易出现 502、handshake failed 等问题。
核心配置:关闭验证 + 启用 SNI
仅加 proxy_ssl_verify off; 不够,还需确保 TLS 握手能正常发起:
-
必须开启 SNI:后端是 HTTPS 时,多数服务依赖 SNI 区分虚拟主机,否则可能返回默认证书或拒绝连接。添加
proxy_ssl_server_name on; -
关闭证书验证:
proxy_ssl_verify off;—— 这是忽略过期、自签名、域名不匹配等所有校验的关键开关 -
协议与端口需匹配:确认后端真实监听 HTTPS(如
https://10.0.1.5:8443),不能误配成http://协议
完整 location 示例(含必要头信息)
以下是最简可用配置,适用于测试或内网环境:
location /api/ {
proxy_pass https://backend.example.com:8443/;
<pre class="brush:php;toolbar:false;"># 忽略证书校验
proxy_ssl_verify off;
proxy_ssl_server_name on;
# 透传原始协议和客户端信息
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;
# 建议调整超时(HTTPS 握手更耗时)
proxy_connect_timeout 60s;
proxy_read_timeout 120s;
proxy_send_timeout 120s;}
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
注意事项与常见坑
忽略校验虽方便,但配置不当仍会失败:
-
不能省略
proxy_ssl_server_name on:即使关了验证,没 SNI 也可能导致后端无法选择正确证书,尤其使用泛域名或多个 HTTPS 站点共用 IP 的场景 -
不要混用
proxy_ssl_trusted_certificate:该指令仅在proxy_ssl_verify on时生效;设为off后配置它无效,还可能引发混淆 - 生产环境慎用:忽略校验等于放弃对后端身份和链路加密完整性的基本保障,仅限开发、测试或完全可信内网
-
重定向头未重写会导致跳转错误:后端返回
Location: https://...时,Nginx 不会自动改写为前端协议,建议配合proxy_redirect或让后端适配反代环境
不复杂但容易忽略。关键就三点:协议写对、SNI 开启、验证关掉。










