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

Nginx Proxy Manager突然无法解析localhost IP的排查求助

问题分析与解决方案

问题描述

家用服务器此前运行正常,昨日起外部访问出现502 Bad Gateway openresty错误,未修改配置仅可能重启过服务器。环境细节:

  • Nginx Proxy Manager(NPM)配合DuckDNS、Let's Encrypt SSL,将请求转发至同一服务器的Home Assistant,原配置转发目标为localhost
  • NPM采用Docker host网络模式,配置如下:
nginx-proxy-manager:
  image: 'jc21/nginx-proxy-manager:latest'
  restart: unless-stopped
  network_mode: host
  volumes:
    - /home/sigma/Server/nginx_proxy_man/data:/data
    - /home/sigma/Server/nginx_proxy_man/letsencrypt:/etc/letsencrypt
  • NPM转发核心配置片段:
server {
  set $forward_scheme http;
  set $server         "localhost";
  set $port           8123;

  listen 80;
listen [::]:80;

listen 443 ssl http2;
listen [::]:443 ssl http2;

  server_name domain.duckdns.org;

  # Let's Encrypt SSL
  include conf.d/include/letsencrypt-acme-challenge.conf;
  include conf.d/include/ssl-ciphers.conf;
  ssl_certificate /etc/letsencrypt/live/npm-2/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/npm-2/privkey.pem;

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;

  access_log /data/logs/proxy-host-1_access.log proxy;
  error_log /data/logs/proxy-host-1_error.log warn;

  location / {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_http_version 1.1;
    include conf.d/include/proxy.conf;
  }

  include /data/nginx/custom/server_proxy[.]conf;
}
  • 日志报错信息:
localhost could not be resolved (3: Host not found), client: 192.168.0.254
failed (111: Connection refused) while resolving, resolver: 127.0.0.1:53

已尝试操作

将NPM配置中的localhost替换为127.0.0.1后问题解决;检查宿主机/etc/hosts配置正常:

127.0.0.1       localhost
127.0.1.1       sigma-server

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters 

问题核心原因

结合日志和环境,异常根源是**localhost解析失效或解析结果无法建立连接**,具体诱因可能是以下一种或多种:

  1. IPv6优先解析冲突:宿主机/etc/hosts中localhost同时映射IPv4(127.0.0.1)和IPv6(::1),系统默认优先解析IPv6,但Home Assistant未监听IPv6地址,导致连接被拒绝。
  2. 本地DNS服务异常:服务器重启后,本地DNS服务(如systemd-resolved)未正常启动或监听端口变化,导致NPM通过127.0.0.1:53无法解析localhost。
  3. Docker host网络的DNS配置偏差:虽然使用host模式,但容器内的resolv.conf未正确继承宿主机配置,依赖的DNS服务不可用。

彻底排查步骤

  1. 验证宿主机解析行为
    • 执行ping localhost,观察返回的是IPv4还是IPv6地址
    • 执行nslookup localhost 127.0.0.1,确认本地DNS服务能否正常解析localhost
  2. 检查容器内DNS配置
    • 进入NPM容器:docker exec -it nginx-proxy-manager bash
    • 查看容器DNS配置:cat /etc/resolv.conf,确认nameserver是否为可用地址
    • 在容器内执行ping localhost,观察解析结果
  3. 确认Home Assistant监听范围
    • 查看Home Assistant的configuration.yaml中http配置段,确认server_host是否为0.0.0.0(监听所有IPv4)或::(监听IPv6+IPv4),若仅设置为127.0.0.1,IPv6解析会导致连接失败

彻底解决方法

方法1:直接用IP替代localhost(最简便)

保留已验证有效的配置,将NPM转发目标设置为127.0.0.1,跳过DNS解析步骤,从根源避免解析问题。

方法2:强制IPv4解析优先

修改宿主机/etc/gai.conf,添加以下配置让系统优先使用IPv4:

precedence ::ffff:0:0/96  100

保存后无需重启,系统会自动应用优先级规则。

方法3:调整Docker容器DNS配置

在docker-compose.yml中为NPM容器指定可靠的DNS服务器,避免依赖可能异常的本地DNS:

nginx-proxy-manager:
  image: 'jc21/nginx-proxy-manager:latest'
  restart: unless-stopped
  network_mode: host
  dns:
    - 127.0.0.1
    - 8.8.8.8
  volumes:
    - /home/sigma/Server/nginx_proxy_man/data:/data
    - /home/sigma/Server/nginx_proxy_man/letsencrypt:/etc/letsencrypt

更新后执行docker-compose up -d重启容器。

方法4:让Home Assistant监听IPv6

若希望保留localhost配置,修改Home Assistant的configuration.yaml,使其同时监听IPv4和IPv6:

http:
  server_host: ::

重启Home Assistant后,即使localhost解析到::1也能正常连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:48:10