售前咨询400-838-0503

Linux服务器网站打不开怎么办?

发布:2026-10-18 13:06

搜索全部帮助分类的文档

使用莱卡云Linux服务器部署网站后,如果出现网页无法访问、连接超时、证书错误或502提示,可以按照“域名解析、服务监听、访问规则、网站响应、应用日志”的顺序排查。

网站访问涉及多个环节。SSH能够登录服务器,并不代表网站服务一定正常;浏览器出现错误页面,也不一定表示服务器已经宕机。

本文以Linux终端和Nginx为例。命令中的example.com、203.0.113.10和2001:db8::10均为演示内容,请替换为实际域名和服务器地址。

1. 先确认网站出现了什么错误

记录浏览器中的完整错误提示,并确认故障影响范围。

现象 优先检查方向
提示找不到域名或无法解析地址 域名状态、DNS记录和本地解析
页面一直等待,最后连接超时 网络路径、监听端口、安全组和防火墙
提示连接被拒绝 网站服务是否启动、目标端口是否监听
提示证书过期或域名不匹配 HTTPS证书、站点配置和设备时间
出现403、404、500、502等页面 站点配置、访问规则、后端应用和日志
打开了默认页或其他网站 域名绑定、虚拟主机和实际访问地址
只有部分用户无法访问 IPv4与IPv6、DNS缓存、CDN节点及用户网络

同时确认:

  • 是所有页面都无法访问,还是某个路径异常。

  • HTTP和HTTPS是否表现一致。

  • 是否刚修改过解析、证书、反向代理或程序配置。

  • 手机移动网络与电脑宽带是否都存在问题。

这些信息可以帮助缩小排查范围。

2. 检查域名解析是否正确

使用dig检查网站域名的A、AAAA和CNAME解析记录

优先在出现问题的客户端网络中查询解析。

查看IPv4记录:

dig example.com A +noall +answer

查看IPv6记录:

dig example.com AAAA +noall +answer

如果访问的是www等子域名,也需要检查对应名称:

dig www.example.com A +noall +answer
dig www.example.com AAAA +noall +answer
dig www.example.com CNAME +noall +answer

没有安装dig时,Debian、Ubuntu通常可以安装dnsutils,RHEL系列通常安装bind-utils。

重点核对以下情况:

检查项目 需要确认的内容
A记录 是否指向预期IPv4地址
AAAA记录 是否指向实际可用的IPv6地址
CNAME记录 目标名称是否正确、能否继续解析
根域名与子域名 实际访问的名称是否配置了记录
CDN代理 解析结果是否符合CDN接入方式

接入CDN后,域名可能解析到CDN边缘节点,而不是源站IP,这是正常现象。

如果配置了AAAA记录,但服务器没有可用的IPv6网站服务,部分访问可能失败。应修复IPv6链路和监听配置,或移除已经确认无效的AAAA记录。

没有配置AAAA记录的纯IPv4网站,也可以正常工作。

如果简洁查询没有返回内容,可以执行完整查询:

dig example.com A

结合返回状态判断是没有对应记录,还是解析服务发生错误。修改解析后,应考虑原记录TTL和缓存影响,不要反复改动正确记录。

3. 检查Nginx服务和监听端口

Linux检查Nginx配置以及80和443端口监听状态

以下命令在服务器内执行。

对于通过系统服务管理的Nginx,先查看状态:

sudo systemctl status nginx --no-pager -l

检查配置:

sudo nginx -t

检查通过,说明本次配置语法及引用文件检查通过,并不代表网站内容、后端服务和网络访问全部正常。

查看80和443端口:

sudo ss -lntp '( sport = :80 or sport = :443 )'

只需要查看监听地址和端口时:

sudo ss -lnt '( sport = :80 or sport = :443 )'

常见结果:

监听地址 含义
0.0.0.0:80 在所有本机IPv4地址上监听HTTP端口
0.0.0.0:443 在所有本机IPv4地址上监听HTTPS端口
127.0.0.1:端口 仅供本机访问
[::]:端口 IPv6通配监听,IPv4是否同时可用需实际验证

如果网站使用自定义端口,需要查询实际端口。

使用宝塔面板、OpenResty或Docker部署时,应检查对应程序和配置,避免误查到服务器中的另一套Nginx。

Docker端口发布可能通过NAT规则实现,不能仅凭宿主机ss没有显示监听,就判断容器端口没有开放,还需要结合第8节检查。

4. 检查安全组和系统防火墙

如果网站服务正常,但外部连接超时,应继续核对网络访问规则。

如果实例提供安全组或平台防火墙功能,检查规则是否应用到了正确实例,并允许实际需要的TCP端口。

常见端口用途:

端口 用途
TCP 80 HTTP访问,以及部分HTTP跳转或验证场景
TCP 443 HTTPS访问
自定义TCP端口 按网站实际配置使用

使用UFW的服务器可以执行:

sudo ufw status verbose
sudo ufw status numbered

如果网站计划直接面向公网开放,并确认缺少对应规则,可以按实际需要添加:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

使用firewalld时,先确认实际区域:

sudo firewall-cmd --get-active-zones
sudo firewall-cmd --zone=public --list-all

public为示例,应替换为入口网卡或来源地址实际对应的区域。

确认需要放行标准HTTP和HTTPS服务后,可以添加运行时规则:

sudo firewall-cmd --zone=public --add-service=http
sudo firewall-cmd --zone=public --add-service=https

验证正常后,将相同命令增加--permanent参数执行,保存永久规则。

如果源站只允许CDN回源或指定管理地址访问,应保留这种访问策略,按可信来源调整规则。排查时不需要清空全部防火墙配置。

5. 使用curl检查网站和源站响应

使用curl保留域名直连源站检查HTTPS网站响应

在客户端Linux终端中,先按正常域名访问网站:

curl --noproxy '*' -sS --connect-timeout 5 --max-time 15 \
  -o /dev/null -D - https://example.com/

该命令发送GET请求,显示响应头,并丢弃响应正文。--noproxy '*'表示本次测试直接连接,不使用curl代理。

重点查看HTTP状态码,以及是否出现连接、解析或证书错误。

如果网站使用CDN,可以保留域名,同时指定源站IP进行对照测试:

curl --noproxy '*' -sS --connect-timeout 5 --max-time 15 \
  --resolve example.com:443:203.0.113.10 \
  -o /dev/null -D - https://example.com/

--resolve只为本次请求指定连接地址,URL仍然使用域名,因此能够保留正确的站点名称和HTTPS证书校验目标。

直接访问https://服务器IP可能命中其他站点,或因证书不包含IP而报错,不适合直接代替域名测试。

对照结果时,可以参考:

测试结果 下一步
正常域名访问失败,源站测试正常 继续检查DNS、CDN、WAF和回源配置
两种方式都连接失败 检查源站监听、访问规则和网络路径
已返回HTTP错误页面 检查对应请求日志和应用状态
返回200,但浏览器仍打不开 检查页面内容、接口、静态资源和浏览器报错

源站如果只允许CDN访问,或者使用专门的源站证书,普通客户端直连失败可能符合既定策略。应在允许的测试环境中验证,不能直接认定源站故障。

6. HTTPS证书错误怎么排查?

如果HTTP可以访问,而HTTPS提示证书错误,重点检查:

  • 证书是否在有效期内。

  • 证书是否包含实际访问的域名。

  • example.com与www.example.com是否都已覆盖。

  • 服务端是否发送了完整的中间证书链。

  • Nginx是否加载了正确站点的证书。

  • 客户端系统时间是否准确。

  • 使用CDN时,边缘证书与源站证书是否分别配置正确。

可以在客户端查看详细握手信息:

curl -v --connect-timeout 5 --max-time 15 \
  -o /dev/null https://example.com/

根据具体错误检查证书、域名和信任链。

如果证书刚刚续期,还需要确认网站服务已经加载新证书。仅替换磁盘上的证书文件,不一定会立即改变正在运行的服务所使用的证书。

修复后应在正常证书校验开启的情况下重新测试,不能以跳过证书验证作为恢复完成的依据。

7. 根据HTTP状态码检查日志

收到HTTP错误页面,说明某个HTTP服务已经响应了请求,但响应可能来自源站、CDN、WAF或其他代理。

状态码 常见排查方向
403 访问规则、文件权限、目录索引、WAF限制
404 请求路径、站点目录、程序路由和伪静态配置
500 应用内部错误、依赖异常或程序配置问题
502 代理与上游通信失败或上游响应异常
503 服务暂时不可用、维护或过载
504 代理等待上游响应超时

日志路径以实际站点的access_log和error_log配置为准。系统包安装的Nginx常见检查方式为:

sudo tail -n 80 /var/log/nginx/error.log
sudo tail -n 80 /var/log/nginx/access.log

使用宝塔面板时,可以从对应网站的日志入口查看;使用容器时,还应检查容器日志。

排查时记录访问时间、请求域名、路径和状态码,再对照日志中的同一次请求。

如果源站访问日志中没有记录,先确认请求是否命中了正确站点,以及日志是否启用。CDN缓存直接响应的请求,也可能不会到达源站。

8. 检查反向代理和Docker应用

出现502或504时,继续检查Nginx后面的应用是否正常。

如果后端是监听本机8080端口的HTTP服务,可以在服务器内测试:

curl -sS --connect-timeout 5 --max-time 10 \
  -H 'Host: example.com' \
  -o /dev/null -D - http://127.0.0.1:8080/

请替换为实际上游地址、端口和请求路径。

该方法适用于HTTP上游。PHP-FPM使用的FastCGI端口或Unix套接字,不能直接当作HTTP接口测试,应检查对应服务、套接字路径和访问权限。

Docker部署可以执行:

docker ps -a --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'

查看目标容器的端口映射和近期日志:

docker port web
docker logs --since 10m --tail 100 web

其中web需要替换为实际容器名称。

重点检查:

  • 容器是否退出或反复重启。

  • 宿主机端口与容器端口是否对应。

  • 应用是否监听了容器中可访问的地址。

  • Nginx配置的上游地址是否正确。

  • 两个容器是否处于能够互通的网络中。

在普通bridge网络部署中,Nginx容器里的127.0.0.1指向该容器自身。如果应用运行在另一个容器中,通常应使用共同网络中的服务名或容器名及实际端口。

仅发布到127.0.0.1的后端端口,可用于宿主机反向代理,无需为了排查而把后端或数据库直接开放到公网。

9. 修改配置前后如何避免扩大故障?

修改前,备份实际需要调整的站点配置,并保留当前错误日志。

确认问题来源后,每次只修改相关项目,例如:

  • 修正错误的解析记录。

  • 修复不正确的server_name。

  • 调整错误的站点目录或上游地址。

  • 更新证书和证书链。

  • 恢复异常应用或修复依赖。

对于由systemd管理、且正在运行的Nginx,配置修改后可以执行:

sudo nginx -t && sudo systemctl reload nginx

只有检查通过,才会执行后续重新加载。

如果Nginx没有运行,应在检查通过、端口没有冲突后启动服务。宝塔和容器环境应使用对应的管理方式,并保证检查与加载的是同一套配置。

同时留意资源问题:

df -h
df -i
free -h

磁盘空间不足、inode耗尽或内存紧张,都可能导致日志写入、临时文件、数据库或应用运行异常。

10. 网站恢复后如何验证?

从原先出现问题的网络重新访问网站,并检查:

  • 根域名和实际使用的子域名是否正常。

  • HTTP到HTTPS的跳转是否符合预期。

  • HTTPS证书是否有效且域名匹配。

  • 首页、关键页面、接口和静态资源是否正常。

  • 已发布AAAA记录时,IPv6访问是否正常。

  • 应用和网站日志是否继续出现同类错误。

  • 使用CDN时,源站与边缘访问是否都恢复正常。

如果页面返回200但显示空白,应继续查看浏览器开发者工具中的网络请求和控制台错误,检查接口失败、脚本加载及资源路径。

需要提交莱卡云技术支持工单时,建议提供故障时间及所在时区、访问域名和路径、完整错误提示、是否使用CDN,以及解析、监听和相关日志结果。

提交前请遮盖密码、令牌、Cookie及其他敏感业务信息。

按文档操作后还是不行,把机器编号、出问题的时间点和现象截图一起提工单,能少来回一轮。

提交工单