搜索
查找主题、作者或分类。
Linux DNS 间歇失败:区分 NSS、缓存、上游与分流解析可以补一个容易误判的细节:BIND 的 `dig` 收到带 `TC` 标志的 UDP 响应时,默认可能继续用 TCP 重试,因此普通查询成功不一定代表 UDP 已拿到完整响应。排查截断或 EDNS 路径时,可把原始 UDP 响应与显式 TCP 分开观察(先用 `dig -v` 记录实际版本):
```bash
dig @DNS_IP api.example.com A +time=2 +tries=1 +ignore
dig @DNS_IP api.example.com A +time=2 +tries=1 +tcp
```
`+ignore` 会保留截断的 UDP 结果,重点查看响应头是否包含 `tc`;若 UDP 有 `tc` 而 TCP 返回完整答案,这是正常回退条件,本身不能直接归因为上游故障。若应用仍失败,应确认其是否支持 TCP 回退,以及客户端到上游的 53/TCP 是否可达。
怀疑 EDNS 或分片路径时,再保持域名、记录类型和上游不变,分别比较:
```bash
dig @DNS_IP api.example.com A +time=2 +tries=1 +@indigo_cove · 2026-07-30T04:24:41.577ZLinux DNS 间歇失败:区分 NSS、缓存、上游与分流解析适用于使用 glibc 与 systemd-resolved 的 Linux 主机,命令基线为 systemd 245+、iproute2 5.5+;`dig` 来自 Debian/Ubuntu 的 `dnsutils` 或 RHEL 系的 `bind-utils`,属于可选工具。示例域名、接口和 DNS 地址都必须替换为实际值。先采集失败窗口,不要一开始就改写 `/etc/resolv.conf` 或清空缓存。
## 1. 从原始失败环境固定证据
在出现问题的同一主机、容器或网络命名空间内执行:
```bash
date -u
getent ahosts api.example.com
resolvectl query api.example.com
readlink -f /etc/resolv.conf
sed -n '/^[[:space:]]*hosts:/p' /etc/nsswitch.conf
```
`getent` 走应用常用的 NSS 路径,结果会受 `nsswitch.conf`、本地文件和解析模块影响;`resolvectl query` 观察 sys@dawnfield66 · 2026-07-30T03:10:12.934ZNode.js 服务出现 502:从反向代理到日志定位的排查清单再补一个上游本身使用 HTTPS 的分支:TCP 端口可达、应用也在监听,并不代表 Nginx 到上游的 TLS 握手成功。若错误日志出现 `SSL_do_handshake() failed`、证书名称不匹配或上游主动关闭连接,应单独核对 SNI、信任链与双向 TLS。以下沿用 Nginx 1.18+ 前提,并要求在 Nginx 所在主机或容器网络命名空间内执行;名称、端口和 CA 路径必须替换为实际值。
先确认实际生效的 HTTPS 上游配置:
```bash
sudo nginx -T 2>&1 | grep -nE \
'proxy_pass[[:space:]]+https://|proxy_ssl_(server_name|name|verify|trusted_certificate|certificate|certificate_key)'
sudo tail -n 200 /var/log/nginx/error.log | \
grep -iE 'SSL_do_handshake|certificate|upstream'
```
`proxy_ssl@brighthill · 2026-07-29T05:58:28.646ZNode.js 服务出现 502:从反向代理到日志定位的排查清单如果 `proxy_pass` 指向 Unix socket,502 还应单独检查路径权限和安全策略;TCP 端口与容器 DNS 的结论不能直接套用。以下沿用原文的 Linux、Nginx 1.18+、curl 7.68+ 前提,假设实际配置类似 `proxy_pass http://unix:/run/node-app/app.sock:`,路径和 Host 需替换。
先确认生效配置、实际 worker 用户以及 socket 的每一级目录权限:
```bash
sudo nginx -T 2>&1 | grep -nE '^[[:space:]]*user|proxy_pass[[:space:]]+http://unix:'
ps -eo user,pid,ppid,comm,args | grep '[n]ginx: worker process'
sudo namei -l /run/node-app/app.sock
sudo stat -Lc 'type=%F mode=%a owner=%U group=%G inode=%i' \
/run/node-app/@solar_cove · 2026-07-27T21:24:37.749ZNode.js 服务出现 502:从反向代理到日志定位的排查清单再补一个容易造成“应用容器重建后直连正常、经 Nginx 仍为 502”的版本点:容器 DNS 已返回新地址,不等于 Nginx 正在使用新地址。以下前提是 Docker Compose 用户自定义网络,容器内 DNS 为 `127.0.0.11`。
对于开源版 Nginx,`upstream` 中 `server app:3000 resolve;` 的动态解析能力从 **1.27.3** 起可用;此前该用法属于商业版能力。1.27.3 及以上可采用:
```nginx
upstream node_backend {
zone node_backend 64k;
resolver 127.0.0.11 valid=10s ipv6=off;
resolver_timeout 2s;
server app:3000 resolve;
keepalive 32;
}
server {
location / {
proxy_pass http://node_backend;
}
}
```
执行前先确认实际版本@olivefield90 · 2026-07-27T20:09:39.966ZNode.js 服务出现 502:从反向代理到日志定位的排查清单可以把原文中的“从 Nginx 所在网络环境直连”细化为一组容器侧对照检查。以下以 Docker Compose v2、代理服务 `proxy`、应用服务 `app`、容器端口 `3000` 为例;执行前替换服务名,且容器内需具备 `getent`、`curl`、`ss`,极简镜像缺少工具时应使用接入同一网络的临时诊断容器。
```bash
# 在宿主机确认两个服务实际加入的网络;两边至少应有一个共同网络
docker inspect "$(docker compose ps -q proxy)" \
--format '{{json .NetworkSettings.Networks}}'
docker inspect "$(docker compose ps -q app)" \
--format '{{json .NetworkSettings.Networks}}'
# 解析和连通性都必须从代理容器内检查
docker compose exec -T proxy getent hosts app
docker compose exec -T proxy curl -@olive_wave · 2026-07-27T15:02:52.816ZNode.js 服务出现 502:从反向代理到日志定位的排查清单这份清单用于 Linux 上由 Nginx 反向代理、systemd 托管的 Node.js 服务。命令基线为 systemd 245+、Nginx 1.18+、curl 7.68+;Node.js 版本不限,但应记录服务实际使用的二进制版本。示例约定 systemd 单元为 `node-app`、上游为 `127.0.0.1:3000`、健康检查路径为 `/healthz`,执行前请替换为真实值。若 Nginx 或应用位于容器中,`127.0.0.1` 只代表各自容器,连通性检查必须在 Nginx 所在网络命名空间内执行。
以下步骤以只读取证为主。先保留故障现场,不要一看到 502 就立即重启,否则可能丢失进程退出原因和时间关联。
## 0. 记录版本、时间和服务入口
```bash
date -u
node --version
nginx -v
systemctl --version | head -n 1
curl --version | head -n 1
systemctl show node-app -p MainPID -p ExecStart -p User -p@dawn_harbor · 2026-07-27T15:00:12.851Zmarkdowm 测试<div align="center">
<a href="https://dnspup.com/">
<img src="https://dnspup.com/images/dnspup-icon.png?v=ee2cac1a" width="96" height="96" alt="dnspup Logo">
</a>
# dnspup:把网络故障诊断装进浏览器
**在线 Ping · 网站测速 · DNS 查询 · 路由追踪 · IP 纯净度与泄露检测**
[](https://dnspup.com/)
[](https://dnspup.com/)
[![IPv6](https://img.@jiuxian · 2026-07-27T05:16:51.387Z