爬虫抓取异常防火墙与站点配置整改清单
爬虫抓取异常通常由服务器防火墙或站点配置误拦截导致。
本文给出完整整改清单,从确认日志、检查防火墙规则到调整Nginx和站点配置文件,每一步都附可执行命令和宝塔后台路径,适合零基础用户直接排查。
常见原因:防火墙误拦或配置冲突
爬虫抓取异常时,先判断是全部爬虫失败还是特定爬虫(如百度、谷歌)失败。
常见原因包括:
- 服务器防火墙(iptables/firewalld) 未放行爬虫IP段。
- 网站应用防火墙(WAF,如宝塔Nginx防火墙) 误判爬虫为攻击。
- Nginx访问控制 中配置了allow/deny规则或User-Agent过滤。
- 站点文件权限或伪静态 配置异常导致爬虫无法获取内容。
动手前的准备:确认日志和工具
登录服务器,准备好以下信息:
- 爬虫IP段:百度爬虫IP段可在百度站长平台查询,谷歌IP段可在官网获取。
- 服务器登录权限:SSH或宝塔面板。
- 日志路径:Nginx日志默认
/var/log/nginx/access.log,宝塔面板可在“网站”->“日志”中查看。
使用命令实时查看最近100条访问日志:
tail -100 /var/log/nginx/access.log | grep -i 'spider\|bot'
确认爬虫请求是否到达服务器,状态码是403、502还是200。
分步检查防火墙与站点配置
1. 检查系统防火墙
执行以下命令查看当前规则:
iptables -L -n --line-numbers
若发现对爬虫IP的DROP或REJECT规则,记录规则编号。
如需删除规则:
iptables -D INPUT <规则编号>
对于firewalld,使用:
firewall-cmd --list-all
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="爬虫IP段" accept'
firewall-cmd --reload
2. 检查宝塔Nginx防火墙(WAF)
在宝塔后台依次点击“网站” -> 对应站点 -> “防火墙”。
检查以下项:
- 全局设置:确认“CC防御”是否开启了“阈值”或“验证码”,若阈值过低,正常爬虫可能被误判。
- IP白名单:将爬虫IP段添加到白名单。
- URL白名单:如果爬虫只访问特定路径,可添加该路径。
- User-Agent过滤:宝塔防火墙上默认有“禁止非浏览器访问”规则,若开启,需要关闭或把爬虫User-Agent加入白名单。
3. 检查Nginx配置文件
Nginx配置可能直接限制爬虫。
查看站点配置文件(宝塔路径:/www/server/panel/vhost/nginx/站点名.conf):
cat /www/server/panel/vhost/nginx/example.com.conf
查找以下内容:
if ($http_user_agent ~* (baiduspider|googlebot)) {
return 403;
}
若存在,删除该if段或修改为允许。
同时检查allow/deny指令,确保没有错误拦截。
4. 检查站点根目录的权限与伪静态
爬虫可能因为文件权限不足返回403。
确保站点目录为755,文件为644:
chmod -R 755 /www/wwwroot/example.com
find /www/wwwroot/example.com -type f -exec chmod 644 {} \;
伪静态规则(如WordPress的固定链接)若配置错误,爬虫可能返回404。
登录宝塔“网站”->“伪静态”选择对应程序模板。
最容易踩的坑
- 忘记保存防火墙规则:重启后iptables规则丢失,需用
service iptables save持久化。 - 同时使用CDN和WAF:CDN来源IP可能与爬虫IP不同,导致WAF误拦。建议将CDN IP段也加入白名单。
- 只放行了IPv4未放行IPv6:部分爬虫使用IPv6访问,需同时检查ip6tables。
- User-Agent大小写敏感:Nginx的
~*为不区分大小写,但宝塔防火墙某些规则可能区分,建议写全小写。
验证爬虫能否正常抓取
修改后,使用curl模拟爬虫请求测试:
curl -A "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" -I https://example.com
返回HTTP状态码200或301即为正常。
若仍异常,查看响应头的Server和Content-Type是否正常。
也可使用百度站长平台的“抓取诊断”工具,或在线cURL模拟工具验证。
常见问题解答
Q1:为什么爬虫抓取返回403但浏览器正常?
通常是防火墙或Nginx根据User-Agent或IP触发了拦截规则。
优先检查宝塔防火墙的User-Agent过滤和Nginx的allow/deny配置。
Q2:我已经添加了爬虫IP白名单,为什么还显示被拦截?
可能未保存防火墙规则(iptables -L 查看),或者同时使用了CDN导致IP源变为CDN节点。
需将CDN节点IP也加入白名单。
Q3:宝塔Nginx防火墙的“CC防御”应该设多少?
对于正常爬虫,建议将“请求频率”阈值调高到30次/秒以上,或直接关闭CC防御只保留全局规则。
Q4:整改后多久爬虫能恢复收录?
修改生效后,爬虫会在下次抓取时自动恢复正常。
可在百度站长平台“索引量”页面观察变化,通常24小时内可见改善。
如果你正在处理爬虫抓取异常问题,建议按本文清单逐项检查,优先确认日志中是否存在403或502错误。
遇到不确定的规则时,可先临时关闭所有防护再逐步开启排查,避免因配置失误影响正常访问。