You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Nginx的proxy_pass从HTTPS URL正确转换为自定义upstream?

正确将Nginx直接HTTPS反向代理转换为upstream组的方法

你的配置无效主要有两个核心问题:URL拼写错误,以及缺少HTTPS upstream所需的关键SSL配置项。以下是修正后的完整配置及关键说明:

正确配置示例

http {
    upstream bff-app {
        server my-bff.azurewebsites.net:443;
        # 启用keepalive连接池,设置空闲长连接上限
        keepalive 32;
    }

    server {
        listen 80 default_server;

        location /api {
            proxy_pass https://bff-app;
            # 指定SSL握手时的SNI名称,必须与后端实际域名一致
            proxy_ssl_name my-bff.azurewebsites.net;
            # 开启SNI扩展支持
            proxy_ssl_server_name on;
            # 启用HTTP/1.1以支持keepalive
            proxy_http_version 1.1;
            # 清除Connection头,避免后端主动关闭长连接
            proxy_set_header Connection "";
            # 可选:传递必要的请求头,确保后端服务正常识别请求
            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;
        }
    }
}

关键配置说明

  • upstream块的keepalive:keepalive 32 会让Nginx维护一个包含32个空闲长连接的连接池,复用连接减少TCP握手开销,这正是你想要的特性。
  • proxy_ssl_name:当使用upstream代理HTTPS服务时,Nginx不会自动从upstream的server条目里提取域名作为SNI,必须显式指定后端服务的实际域名,否则后端可能无法匹配正确的SSL证书,导致连接失败。
  • proxy_http_version与Connection头:HTTP/1.0默认不支持长连接,因此需要强制使用HTTP/1.1,并清空Connection头,避免后端收到Connection: close指令关闭连接。
  • 拼写修正:你原配置中proxy_pass https:/bff-app少了一个斜杠,正确格式是https://bff-app。

为什么原配置无效

  1. URL格式错误,导致Nginx无法正确解析upstream地址;
  2. 缺少SNI相关配置,SSL握手时后端无法识别请求的域名,证书验证失败;
  3. 未配置HTTP/1.1及对应连接头,keepalive特性无法生效(即使你不需要keepalive,前两点也会导致连接失败)。

内容的提问来源于stack exchange,提问作者mac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:20:34