直接用 proxy_pass https://... 可代理到 HTTPS 后端,但需配置 SSL 验证、超时及请求头,否则易报 502;结尾不加 / 保留原始 URI,加 / 则剥离 location 路径;自签名证书需设 proxy_ssl_verify off,生产环境应启用验证并指定 CA;还需调大超时值并传递 Host、X-Real-IP 等关键头。

直接用 proxy_pass https://... 就能代理到 HTTPS 后端,但必须额外处理 SSL 验证、超时和请求头,否则大概率报 502 或连接失败。
proxy_pass 指向 HTTPS 后端地址
在 location 块中写明后端 HTTPS 地址即可,注意协议前缀不能省略:
-
proxy_pass https://api.example.com;(带域名,走 DNS 解析) -
proxy_pass https://192.168.1.100:8443;(带 IP 和端口) - 结尾不加
/时,原始 URI 路径会完整保留;加/则会剥离 location 路径再拼接,例如location /api/ { proxy_pass https://backend/; }会把/api/user变成/user发给后端
关闭或配置后端证书验证
Nginx 默认会校验后端 HTTPS 证书。若后端用的是自签名证书、内网 CA 或测试环境,需显式控制验证行为:
- 开发/测试阶段可临时关闭:
proxy_ssl_verify off; - 生产环境应启用验证并指定可信 CA 证书:
proxy_ssl_trusted_certificate /etc/nginx/ssl/internal-ca.crt; - 还可限制证书域名匹配:
proxy_ssl_name "api.internal";(对应后端证书的 SAN 字段)
调整超时与传递关键请求头
HTTPS 后端握手比 HTTP 更耗时,且后端通常需要识别真实客户端信息:
- 调大连接和读取超时:
proxy_connect_timeout 60s;、proxy_read_timeout 120s;、proxy_send_timeout 120s; - 必须传递原始 Host:
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;
完整可运行示例
以下是一个最小可用配置,监听 80 端口,将所有请求代理至内部 HTTPS API:
server {
listen 80;
server_name gateway.local;
location / {
proxy_pass https://internal-api.company:8443;
proxy_ssl_verify off;
proxy_connect_timeout 60s;
proxy_read_timeout 120s;
proxy_send_timeout 120s;
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;
}
}


















