恩威信息网建站案例:DNS解析慢导致SEO掉排名,3天排查修复全记录
去年年底接了一个本地信息平台的改版需求——恩威信息网。老站点用的是某虚拟主机,PHP+MySQL,日均IP大概800,百度收录正常。但客户反映从10月开始,首页打开经常要5-6秒,后台编辑文章也卡,百度站长平台抓取诊断频繁报超时。这篇文章把整个排查和修复过程拆开来讲,希望同行少走弯路。
现状判断:响应慢、抓取失败、排名下滑
接手时先看数据。用Chrome DevTools的Network面板测首页加载,DOMContentLoaded在4.2s,完全加载要6.8s。百度资源平台的抓取诊断显示最近7天有3次抓取超时(错误码522),移动端首页排名从第5页掉到了第8页。
服务器配置:单核CPU、1G内存、50G SSD,跑了Nginx 1.18 + PHP 7.4。磁盘I/O正常,CPU空闲率70%以上,内存用了40%。初步判断不是硬件瓶颈。
排查方向:先看网络层,再看应用层。用dig命令检查DNS解析耗时:
dig enweixinxi.com | grep "Query time"
# 结果:Query time: 312 msec正常DNS解析应该在50ms以内,这里312ms,明显偏慢。同时用curl -w "@curl-format.txt" -o /dev/null -s测全链路,发现连接建立时间(TTFB)占了总耗时60%以上。
方案选择:从DNS到Web服务逐层优化
锁定三个方向:DNS解析提速、Web服务器配置调优、数据库查询优化。
- DNS方案:原域名用的是域名注册商自带的DNS,节点少。换成腾讯云DNSPod(免费版),解析节点覆盖全国,自带CNAME加速。
- Web服务器:Nginx开启gzip压缩,配置fastcgi缓存,把PHP动态请求的静态副本缓存下来。
- 数据库:给文章表(cms_article)的catid和status字段加联合索引,减少全表扫描。
没有选CDN,因为客户预算有限,且站点图片不多,主要是文本内容。DNS换解析商是成本最低的。
执行流程:改DNS、调Nginx、加索引
具体操作分三步走,每一步都做了前后对比。
1. DNS迁移
在DNSPod添加域名,把NS记录改为DNSPod提供的两个服务器地址。注意TTL值改小到300秒,这样迁移过程中旧缓存过期快。等待48小时全球生效后,重新测解析耗时:
dig enweixinxi.com | grep "Query time"
# 结果:Query time: 28 msec降到了原来的十分之一。
2. Nginx配置优化
在/etc/nginx/sites-available/enweixinxi.com中启用gzip和fastcgi缓存:
gzip on;
gzip_types text/plain text/css application/json application/javascript;
fastcgi_cache_path /tmp/nginx_cache levels=1:2 keys_zone=WORDPRESS:10m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
server {
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 60m;
add_header X-FastCGI-Cache $upstream_cache_status;
}
}重启Nginx后,首页第一次访问还是慢,但第二次开始返回X-FastCGI-Cache: HIT,加载时间降到1.2s。
3. 数据库索引
登录phpMyAdmin,执行:
ALTER TABLE cms_article ADD INDEX idx_catid_status (catid, status);之前分类列表页查询耗时1.8s,加索引后降到0.3s。
风险提醒:DNS切换期和缓存陷阱
踩了两个坑。第一个是DNS切换后,部分省份用户反馈打不开,持续了大概6小时。原因是运营商DNS缓存没刷新,TTL设300秒但有些节点强行缓存24小时。解决办法是同时保留原DNS解析一周,等流量全部切过来再删除。
第二个坑是Nginx fastcgi缓存没清,导致文章更新后首页还是旧内容。加了个hook,在文章发布时自动删除对应的缓存文件:
function purge_cache_on_update($post_id) {
$cache_path = "/tmp/nginx_cache";
system("rm -rf $cache_path/*");
}
add_action('publish_post', 'purge_cache_on_update');这样每次更新文章,首页缓存自动失效,下次访问重新生成。
优化方向:图片懒加载和AMP
目前响应时间稳定在1.5s以内,百度抓取诊断全部通过,一个月后排名回到了第3页。后续可以继续做两件事:
- 给列表页图片加懒加载(用loading="lazy"属性),减少首屏请求数;
- 生成AMP版本页面,适配移动端快速收录,百度对AMP有单独的抓取通道。
客户预算有限,这两项可以等流量再涨一些后逐步上线。优化不是一次性做完,而是跟着业务走。
FAQ:建站慢排查常见问题
问:怎么快速判断是DNS还是服务器问题?
答:用dig看DNS耗时,同时用curl -w测TTFB。如果TTFB小但页面加载慢,说明是后端渲染慢;如果TTFB大,优先看DNS和网络链路。
问:Nginx缓存对动态站安全吗?
答:只要合理设置缓存有效期,并且有缓存清理机制(如上面的hook),对动态站是安全的。建议只缓存GET请求,不缓存POST。
问:换DNS服务商会不会丢数据?
答:不会。DNS只做域名解析,不存数据。只要新旧NS记录都配置正确,等待TTL过期后切换即可。建议在低峰期操作。
声明:该信息由用户发布,真实性以及合法性由发布人负责,本站不会介入任何形式的担保!