nginx反向代理https后端需配置proxy_pass为https://协议,启用proxy_ssl_verify并指定可信ca证书,设置x-forwarded-proto等头信息及tls版本、超时等参数。

在 Nginx 中反向代理后端 HTTPS 服务,核心是让 Nginx 主动发起 HTTPS 请求连接上游(backend),而不是默认的 HTTP。这需要显式配置 proxy_pass 使用 https:// 协议,并处理 TLS 验证、证书信任等环节。
确保 proxy_pass 指向 HTTPS 地址
Nginx 默认以 HTTP 协议与上游通信。若后端是 HTTPS,必须在 proxy_pass 中写明完整 HTTPS URL:
- ✅ 正确写法:
proxy_pass https://backend.example.com; - ❌ 错误写法:
proxy_pass http://backend.example.com;(会尝试用 HTTP 连接 HTTPS 端口,握手失败) - 注意:域名需可被 Nginx 所在服务器 DNS 解析;若用 IP,需确认后端证书 Subject 或 SAN 包含该 IP(否则 TLS 验证失败)
关闭或自定义 SSL 验证(按需)
Nginx 默认会对上游 HTTPS 证书做严格校验(包括有效期、域名匹配、CA 信任链)。若后端使用自签名证书、私有 CA 或通配符不匹配,需调整:
- 跳过验证(仅限测试/内网):
proxy_ssl_verify off; - 启用验证并指定可信 CA 证书:
proxy_ssl_trusted_certificate /etc/nginx/ssl/backend-ca.crt; - 强制验证主机名(推荐):
proxy_ssl_verify_depth 2;+proxy_ssl_name "backend.example.com";(尤其当proxy_pass使用 IP 时,此参数指定 SNI 和证书 CN/SAN 匹配名)
转发原始协议与头信息
后端服务常依赖 X-Forwarded-Proto 判断是否为 HTTPS 请求,也需透传客户端真实地址:
-
proxy_set_header X-Forwarded-Proto $scheme;(前端是 HTTPS 时传https) proxy_set_header X-Forwarded-For $remote_addr;-
proxy_set_header Host $host;(保持原始 Host,避免后端因 Host 不匹配拒绝请求)
其他关键配置项
避免常见超时或连接问题:
-
proxy_ssl_protocols TLSv1.2 TLSv1.3;(禁用老旧协议,提升安全性) -
proxy_ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;(按后端支持调整) -
proxy_read_timeout 60;(后端响应慢时防止 Nginx 过早断连) -
proxy_http_version 1.1;+proxy_set_header Connection "";(支持长连接)











