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

修改域名后通过代理请求API报错ERR_NAME_NOT_RESOLVED问题求助

错误根因定位

从你提供的Nginx报错日志可以直接定位核心异常点:

2021-11-11 18:02:05 +0000 2021/11/11 18:02:05 [error] 15#15: *192 config.json could not be resolved (3: Host not found), client: 10.0.0.2, server: ~^proxy.name-of_the.website.pl$, request: "GET /config.json HTTP/1.1

Nginx错误地将请求路径中的config.json当做主机名尝试解析,而非将该请求转发到上游的API服务,该问题基本是更换域名时修改代理配置出错导致的,可按以下步骤逐一排查:

  • 检查前端硬编码的API地址:打开浏览器F12网络面板,查看登录请求的目标Host是否为新的代理域名proxy.name-of_the.website.pl,如果前端打包时硬编码了旧的API域名,就会导致请求指向不存在的地址。
  • 检查Nginx代理配置规则:更换域名时如果修改了proxy_pass相关配置,很可能出现配置错误,比如proxy_pass地址末尾多写了斜杠、或者把路径变量错误拼接到了上游服务域名中,导致Nginx把路径识别为主机名。
  • 检查Docker Swarm内部解析配置:确认Nginx配置中是否显式配置了Swarm内部DNS127.0.0.11,如果proxy_pass使用变量的场景下没有配置resolver,Nginx不会动态解析内部服务域名。
  • 验证集群内部连通性:登录到Nginx容器内部,执行nslookup 你的API服务名,确认Swarm的overlay网络正常,API服务的网络别名可以被正常解析。
解决方案
  • 修正前端配置:如果确认前端硬编码了旧域名,将所有硬编码的API地址替换为新的代理域名,或者直接改用相对路径发起请求,避免后续域名变更再次出现同类问题。
  • 修正Nginx代理配置:
    1. 在Nginx的http块或对应server块中添加内部DNS配置,保证内部服务域名可以动态解析:
    resolver 127.0.0.11 valid=10s;
    
    1. 修正proxy_pass规则,避免路径被识别为主机名,假设你的API服务在Swarm中的服务名为api-service,正确配置参考:
    server {
      server_name ~^proxy\.name-of_the\.website\.pl$;
      listen 80;
      location / {
        proxy_pass http://api-service;
        proxy_set_header Host $host;
      }
    }
    
    不要在proxy_pass的上游地址后多余添加斜杠或者路径变量,避免出现路径拼接错误。
  • 验证配置生效:重新加载Nginx配置后,发起登录请求,确认请求可以正常转发到API服务,不再出现域名解析错误。
  • 若部分用户仍有报错,指导用户清理本地DNS缓存,等待旧域名的DNS记录TTL过期即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:06:09