“网站打不开"是运维最高频的工单。别乱猜,按下面这条链路从外到内一层层排除,基本都能定位。

DNS 解析 → 网络可达 → 安全组/防火墙 → 端口监听 → 服务进程 → 应用日志

第一步:DNS 解析对不对

dig www.example.com            # 查 A 记录
dig @8.8.8.8 www.example.com   # 指定公共 DNS 查
nslookup www.example.com
  • 解析不到 / 解析到错误 IP → 去 DNS 控制台看记录(A / CNAME)是否配置正确、是否生效(TTL 有缓存)。
  • 本机 /etc/hosts优先于 DNS,排查时先看它有没有写死:
cat /etc/hosts
cat /etc/resolv.conf           # 本机用的 DNS 服务器

第二步:网络通不通、端口开没开

ping <IP>                      # ICMP 通不通(部分云默认禁 ping,不通不代表坏)
nc -vz <IP> 80                 # 测试 TCP 80 是否可达
telnet <IP> 80                 # 老式但直观
  • nc -vz 超时 → 网络/安全组/防火墙挡了。
  • 通了但没响应 → 端口没服务在监听,进入下一步。

第三步:安全组与防火墙

云服务器有两层防火墙,都要查:

  1. 云安全组(云控制台):入方向是否放行了对应端口(如 80/443)。
  2. 系统防火墙(主机内):
sudo ufw status verbose        # Ubuntu
sudo iptables -L -n            # 看规则

常见坑:服务起来了、端口也监听了,但安全组没放行,外部就是连不上。

第四步:端口有没有在监听

ss -tlnp | grep -E ':(80|443)\b'
  • 有监听 → 服务进程在,问题在内层。
  • 没监听 → 服务没起或监听在别的地址/端口。

注意监听地址:0.0.0.0:80 是全接口可访问;127.0.0.1:80 只有本机能访问(外部连不上是正常的)。

第五步:服务状态与日志

systemctl status nginx
journalctl -u nginx --since "10 min ago"
tail -f /var/log/nginx/error.log
curl -I http://127.0.0.1/       # 本机自测

本机 curl 能通、外部不通 → 基本锁定是安全组/防火墙/监听地址问题。

一次完整排查示例

现象:https://www.pilotechen.site 打不开。

# 1. DNS
dig www.pilotechen.site +short      # 有 IP,正常

# 2. 本机服务与端口
ss -tlnp | grep :80                 # 0.0.0.0:80 在监听,正常
curl -I http://127.0.0.1/           # 200,服务本身 OK

# 3. 结论:服务正常 → 检查云安全组是否放行 80
#    到云控制台安全组,放行 TCP 80,问题解决

常用命令汇总

检查项命令
DNS 解析dig / nslookup
TCP 可达nc -vz IP 端口 / telnet
监听端口ss -tlnp
服务状态systemctl status
日志journalctl -u / tail -f
本机自测curl -I http://127.0.0.1/

记住顺序:先确认"通不通”,再确认"服务起没起",最后看"报什么错",别一上来就改配置。