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

AWS实例上Nginx报host not found in upstream错误频繁宕机如何解决

根因定位

你遇到的报错[emerg] host not found in upstream "nlb-url"核心触发逻辑如下:

  1. Nginx默认对upstream配置块、proxy_pass中直接写入的域名,仅会在进程启动/重载配置时执行一次DNS解析,后续运行过程中不会主动更新解析结果
  2. AWS NLB的域名属于动态解析资源,官方默认DNS TTL为60秒,对应的后端IP会随着扩缩容、故障切换等场景动态变更,一旦IP更新后Nginx持有的旧解析记录失效,就会抛出上述错误,导致进程异常退出,返回503错误
  3. 你每次重启Nginx后服务恢复,是因为重启阶段Nginx会重新触发DNS解析,拿到NLB最新的有效IP,属于临时修复,等到下一次NLB IP变更后问题会复现
修复方案
  • 第一步:配置Nginx动态解析规则
    在Nginx的http配置块中添加resolver配置,指定DNS服务器地址和解析有效期,适配AWS NLB的TTL特性:
http {
    # 填写你AWS VPC的默认DNS服务器,一般为VPC网段首地址+2,例如VPC是10.0.0.0/16则DNS为10.0.0.2,也可填公共DNS如8.8.8.8
    resolver 10.0.0.2 valid=60s;
    resolver_timeout 10s;

    # 你的原有upstream配置保持不变即可
    upstream your_upstream_name {
        server 你的NLB域名;
    }
}

如果你的NLB域名是直接写在proxy_pass配置中,需要调整为变量写法强制触发动态解析:

server {
    location / {
        set $nlb_addr 你的NLB域名;
        proxy_pass http://$nlb_addr;
    }
}
  • 第二步:配置Nginx进程异常自动恢复
    修改Nginx的systemd服务配置,添加自动重启策略,避免进程崩溃后服务长时间不可用:
  1. 编辑配置文件/usr/lib/systemd/system/nginx.service,在[Service]段添加如下配置:
Restart=always
RestartSec=5
  1. 执行命令systemctl daemon-reload && systemctl restart nginx使配置生效
  • 验证方式:配置完成后手动执行nginx -t检查配置语法是否正确,重载配置后观察24小时以上确认不再复现宕机问题
附件参考

Nginx运行状态截图:
Nginx运行状态截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:36:03