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

Nginx配置proxy_pass从URI提取域名转发报上游主机找不到错误

Nginx根据URI路径段动态转发到不同域名配置方案

报错核心原因

  • 正则匹配location语法错误:Nginx中使用正则编写location匹配规则时,必须以~(区分大小写匹配)或~*(不区分大小写匹配)开头,原有配置的location规则缺少这个前缀,Nginx将其识别为普通前缀匹配规则,正则捕获逻辑完全不生效,$1变量为空值,最终拼接出的上游地址为https://-domain.com:8080,因此加载配置时提示找不到上游主机。
  • 正则捕获组位置错误:目标URI结构为/api/{org标识}/剩余路径,原有正则的捕获组没有对准第二段路径的org标识,即使正则语法正确也无法提取到目标值。
  • 缺少DNS解析配置:当proxy_pass使用变量拼接上游地址时,Nginx不会在配置加载阶段预解析域名,会在请求到达时实时解析,若不手动指定DNS服务器会出现运行时解析失败问题。

正确可运行配置

user nginx;
worker_processes  1;
events {
  worker_connections  10240;
}
http {
  # 指定DNS解析服务器,可替换为内网DNS地址,valid设置解析结果缓存时间
  resolver 114.114.114.114 8.8.8.8 valid=30s;
  server {
      listen 8080 ssl;
      # 需补全原有SSL证书配置,否则ssl监听无法启动
      # ssl_certificate 证书存放路径;
      # ssl_certificate_key 证书私钥存放路径;
      server_name  nginx-proxy;

      # 正则逻辑:匹配/api/开头的路径,第一个捕获组提取org标识,第二个捕获组提取后续请求路径
      location ~ ^/api/([^/]+)/(.*)$ {
        # 拼接目标上游地址,携带捕获的路径与原请求参数,避免路径、参数丢失
        proxy_pass  https://$1-domain.com:8080/$2$is_args$args;
        # 透传必要请求头,避免后端服务识别异常
        proxy_set_header Host $1-domain.com;
        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;
      }
  }
}

配置说明

  • 正则^/api/([^/]+)/(.*)$匹配以/api/开头的URI,第一个捕获组提取/api/之后第一个路径段的内容(即org1/org2这类标识),第二个捕获组提取org标识之后的全量路径,保证转发时路径和原请求完全一致。
  • $is_args$args用于拼接原请求的查询参数,避免参数丢失。
  • 之前使用rewrite出现302跳转,是因为rewrite规则默认触发外部重定向,上述配置为Nginx内部透明转发,客户端不会收到跳转响应,完全符合代理需求。
  • 配置修改完成后执行nginx -t验证语法无报错,再执行nginx -s reload重载配置即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:57:11