服务器可以 Ping 通,SSH 也能登录,但浏览器始终打不开网站,这种情况并不少见。
Ping 检查的是 ICMP 连通性,网站访问还涉及端口、Web 服务、域名解析和 HTTPS。能够收到 Ping 回复,并不能证明网站服务正常;如果域名接入了 CDN,还需要分清测试的是 CDN 节点还是源站。
本文以 Linux 服务器、Nginx 网站、Windows 客户端为例。示例中的 example.com 和 203.0.113.10 必须替换为实际域名和服务器 IP;使用自定义端口的网站,应同步替换端口。

1.在自己的电脑上测试网站端口
在 Windows PowerShell 中执行:
Test-NetConnection example.com -Port 443
如果网站使用 HTTP,再测试:
Test-NetConnection example.com -Port 80
重点查看两个字段:
| 字段 | 判断方法 |
|---|---|
RemoteAddress | 本次实际连接的地址,确认是否符合预期 |
TcpTestSucceeded | True 表示这次 TCP 连接成功,False 表示失败 |
端口测试成功,只能说明 TCP 连接建立成功,后面仍可能遇到证书错误、网站权限问题或应用故障。
如果网站接入 CDN,域名端口测试通常指向 CDN。只有源站本来就允许客户端直连时,才适合另外测试源站 IP:
Test-NetConnection 203.0.113.10 -Port 443
源站仅允许 CDN 回源时,普通客户端无法直连可能是预期行为。
2.检查服务器是否监听网站端口
登录 Linux 服务器,以 root 用户执行:
ss -lntp '( sport = :80 or sport = :443 )'
这条命令查看 TCP 80、443 端口的监听情况及对应进程。
常见监听地址可以这样理解:
| 监听地址 | 含义 |
|---|---|
0.0.0.0:443 | 监听所有本机 IPv4 地址 |
127.0.0.1:443 | 仅供本机通过回环地址连接 |
指定地址加 :443 | 只监听该地址 |
[::]:443 | IPv6 通配监听,是否兼容 IPv4还需结合配置验证 |
如果网站直接运行在宿主机上,却没有对应监听,先检查服务是否启动、端口是否配置正确。
如果有监听,但外部连接失败,则继续核对云平台安全组、服务器防火墙、监听地址及 NAT 转发。规则应与实际业务端口、协议和允许访问的来源一致。
对于 Docker 部署,还要查看端口映射:
docker ps --format 'table {{.Names}}\t{{.Ports}}'
Docker 可以通过 NAT 规则发布端口,因此不能仅凭宿主机 ss 没有显示进程,就判断容器端口未发布。
3.检查 Nginx 状态和配置
对于通过系统软件包安装、由 systemd 管理的 Nginx,在服务器执行:
systemctl status nginx --no-pager -l
nginx -t
journalctl -u nginx -n 50 --no-pager
nginx -t 会检查配置语法,并尝试打开配置引用的文件。证书路径错误、引用文件缺失等问题,通常可以在这里发现。
重点留意:
- 配置文件或引用文件不存在。
- 证书、私钥路径错误。
- 监听端口被其他程序占用。
- 配置语法错误,导致服务启动或重新加载失败。
还可以查看网站错误日志。系统安装的常见路径为:
tail -n 80 /var/log/nginx/error.log
如果站点单独配置了 error_log,应查看对应文件。宝塔、其他面板或容器部署的 Nginx,也应使用其实际程序路径和管理方式。
配置检查通过只代表检查项没有报错,仍需继续验证请求是否进入了正确的网站。
4.核对域名解析,特别是 IPv6
回到自己的电脑,在 PowerShell 中执行:
Resolve-DnsName example.com -Type A
Resolve-DnsName example.com -Type AAAA
A 记录对应 IPv4,AAAA 记录对应 IPv6。没有配置 IPv6 的网站,不一定需要 AAAA 记录。
重点检查是否还指向旧服务器、是否误填地址,以及 CDN 开启后解析结果是否符合其配置。接入 CDN 时,解析到 CDN 节点而不是源站 IP,通常是正常现象。
如果存在 AAAA 记录,可以在 PowerShell 分别测试 IPv4 和 IPv6:
curl.exe -4 --noproxy "*" --max-time 15 -v -o NUL https://example.com/
curl.exe -6 --noproxy "*" --max-time 15 -v -o NUL https://example.com/
如果 IPv4 正常、IPv6 失败,需要同时检查测试电脑是否具备可用 IPv6,以及网站的 AAAA 记录、IPv6 监听和防火墙规则。测试电脑本身没有 IPv6 时,不能据此认定服务器配置错误。
5.保留域名访问,检查 HTTPS 和源站
直接用浏览器访问服务器 IP,可能进入默认网站,也可能遇到证书域名不匹配。因此,测试源站时应保留正确的域名信息。
先在 Windows PowerShell 中按正常解析访问:
curl.exe --noproxy "*" --connect-timeout 5 --max-time 15 -v -o NUL https://example.com/
如果源站允许直连,再指定源站 IP 测试同一个域名:
curl.exe --noproxy "*" --connect-timeout 5 --max-time 15 --resolve example.com:443:203.0.113.10 -v -o NUL https://example.com/
第二条命令通过 --resolve 指定连接地址,同时保留 URL 中的域名,用于 HTTPS 的 SNI 和证书验证,也能让网站识别正确的 Host。仅给 HTTPS 请求添加 Host 请求头,并不能替代 SNI。
这里使用 curl.exe 是为了明确调用 Windows 的 curl 程序;--noproxy "*" 排除环境代理的影响,-o NUL 丢弃响应正文,保留诊断输出。
如果普通域名访问失败,而指定源站的同一请求正常,可以进一步检查 DNS、CDN 配置和回源设置,但还不能仅凭这一项结果确定原因。
如果源站使用 Cloudflare Origin CA 证书,直接访问时可能出现客户端不信任证书的提示。此类证书用于 Cloudflare 与源站之间的连接,应结合部署方式判断,不能直接认定网站对外证书失效。
6.根据结果缩小排查范围
拿到端口测试和 curl 输出后,可以按下面的方向继续检查:
| 现象 | 优先排查方向 |
|---|---|
| 连接超时 | 网络路径、安全组、防火墙、目标地址、服务负载 |
Connection refused | 服务未监听、监听地址错误,或连接被主动拒绝 |
| 域名无法解析 | DNS 记录、解析服务器、本地解析环境 |
| 证书校验失败 | 证书有效期、域名匹配、证书链、客户端时间及信任库 |
| 301、302 等跳转 | 检查 Location 指向的下一跳是否正确 |
| 403 | 访问规则、认证、文件权限或 WAF 拒绝 |
| 404 | 站点匹配、请求路径、网站目录或应用路由 |
| 502 | 网关与上游应用之间的连接或响应问题 |
| 504 | 网关等待上游响应超时 |
其中,502 表示网关或代理未取得有效的上游响应;504 表示未能及时取得上游响应。出现这类状态码,应结合反向代理、PHP-FPM 或应用服务日志继续定位。
已经收到 HTTP 错误页面,说明至少有一层 HTTP 服务作出了响应,但这个响应也可能来自 CDN、WAF 或代理,不一定来自源站。
如果返回 200,浏览器仍然白屏,则打开开发者工具,检查静态资源、接口请求和 JavaScript 错误。首页请求成功,并不代表页面依赖的所有资源都正常。






