第一部分两大核心报错 排查 解决方案一、系统全局报错Name or service not known 报错现象ping/curl/所有程序都无法解析域名整个服务器 DNS 失效 3 步极速排查测试系统默认解析nslookup 目标域名测试公共 DNS判断是否内网 DNS 挂了nslookup 目标域名 114.114.114.114查看系统 DNS 配置cat /etc/resolv.conf✅ 3 种解决方法按优先级万能应急hosts 绑定100% 生效绕过所有 DNS# 格式IP 域名 echo 111.124.203.55 smtp.163.com /etc/hosts永久修复优化系统 DNS 配置修改/etc/resolv.conf公共 DNS 前置避免卡死# 首选稳定公共DNS nameserver 114.114.114.114 nameserver 223.5.5.5 # 关键参数快速超时、轮询DNS options timeout:1 attempts:1 rotate网络兜底放行 DNS 端口DNS 默认使用UDP 53端口放行防火墙iptables -A OUTPUT -p udp --dport 53 -j ACCEPT二、Nginx 专属报错host not found in upstream 报错现象命令行能解析域名仅 Nginx 启动 / 配置测试失败 3 步极速排查确认系统能解析nslookup 域名检查 Nginx 配置是否硬写域名、无变量检查是否配置resolver静态域名配了也无效✅ 3 种解决方法按优先级最快应急直接替换为 IP# 报错写法硬写域名 proxy_pass https://smtp.163.com:465; # 修复写法直接用IP proxy_pass https://111.124.203.55:465;生产根治变量 resolver脱离系统 DNS✅七层 HTTP 代理完整配置http { # 配置Nginx自定义DNS不依赖系统 resolver 114.114.114.114 223.5.5.5 valid300s; server { listen 80; location / { # 核心用变量包裹域名触发运行时解析 set $target smtp.163.com; proxy_pass https://$target:465; } } }✅四层 TCP 代理 (stream)完整配置独立隔离必须单独配stream { # 四层代理独立配置DNS resolver 114.114.114.114 valid300s; server { listen 8465; set $target smtp.163.com; proxy_pass $target:465; } }兜底方案绑定 hosts和系统修复方法一致全局强制映射 IP。第二部分必须吃透的核心逻辑永久避坑1. Linux 系统域名解析固定流程优先级不可逆/etc/hosts本地绑定 → 系统DNS(/etc/resolv.conf) → 外网DNS优先级hosts 最高修改后立即生效系统 DNS从上到下顺序尝试第一个失败直接终止不会重试后面的 DNS2. 决定报错的两种解析模式核心中的核心① 静态预解析报错根源特征配置硬写死域名无任何变量时机程序启动 / 配置测试时一次性解析依赖仅系统 DNShosts坑点软件自定义 DNS如 Nginx resolver完全无效代表Nginx 硬写域名、Java 配置文件写域名② 运行时动态解析稳定方案特征域名用变量 / 动态拼接时机用户请求时实时解析依赖软件自定义 DNSresolver优势系统 DNS 崩了也不影响服务代表Nginx 变量写法、代码动态请求3. Nginx 解析特殊规则高频踩坑静态域名 启动解析 只认系统 DNS变量域名 运行解析 只认 resolver 配置http{}七层和stream{}四层完全隔离resolver 必须分开配置静态域名写 resolver 属于无效配置4. DNS 失效的根本原因云服务器阿里云 / 腾讯云默认将内网 DNS放在/etc/resolv.conf首位内网 DNS 故障返回SERVFAIL→ 解析直接终止根本不会尝试后面的公共 DNS→ 解决方案公共 DNS 必须前置极简总结全服务报错 系统 DNS 坏了 → 改 hosts / 修系统 DNS仅 Nginx 报错 静态预解析 → 换 IP / 用变量 resolver固定域名吃系统 DNS变量域名吃应用 DNS内网 DNS 放首位 定时炸雷公共 DNS 前置最稳定