织梦屏蔽垃圾爬虫方法

站点上线后很快会被各类 SEO 工具蜘蛛、镜像采集器、扫描器骚扰,它们消耗带宽、占用数据库连接、甚至导致源码泄露。本文汇总从软到硬的多种屏蔽方法,按需组合使用。

一、识别需要屏蔽的爬虫

通过日志分析(参考上一篇《织梦如何排查恶意蜘蛛抓取》),常见垃圾爬虫清单:

UA 标识归属是否屏蔽
AhrefsBotAhrefs SEO 工具建议屏蔽
SemrushBotSemrush SEO 工具建议屏蔽
MJ12botMajestic SEO建议屏蔽
DotBot Moz SEO建议屏蔽
PetalBot华为花瓣看是否需要
Bytespider字节跳动看是否需要

二、robots.txt 屏蔽(第一层)

对遵守协议的爬虫有效,是基础手段:

User-agent: AhrefsBot
Disallow: /

User-agent: SemrushBot
Disallow: /

User-agent: MJ12bot
Disallow: /

User-agent: DotBot
Disallow: /

User-agent: PetalBot
Disallow: /

User-agent: *
Disallow: /dede/
Disallow: /plus/
Allow: /
robots.txt 是公开文件,不要在里面写敏感目录路径,反而泄露后台地址。敏感目录用 Nginx 直接 deny。

三、Nginx UA 屏蔽(第二层)

map $http_user_agent $bad_bot {
    default 0;
    ~*AhrefsBot 1;
    ~*SemrushBot 1;
    ~*MJ12bot 1;
    ~*DotBot 1;
    ~*PetalBot 1;
    ~*YisouSpider 1;
    ~*crawler 1;
}

server {
    if ($bad_bot) {
        return 403;
    }
}

用 map 比多个 if 更清晰,且性能更好。

四、Nginx IP 屏蔽(第三层)

对不换 UA 但固定 IP 的爬虫:

location / {
    deny 1.2.3.4;
    deny 5.6.7.0/24;
    deny 10.0.0.0/8;
    allow all;
}

配合宝塔“系统防火墙 - IP 规则”可视化添加,支持批量导入。

五、Nginx 限速(第四层)

limit_req_zone $binary_remote_addr zone=antibot:10m rate=15r/s;

server {
    limit_req zone=antibot burst=20 nodelay;
    limit_conn conn 20;
}

对高频抓取直接限流,正常用户无感。

六、宝塔网站防火墙(第五层)

宝塔 WAF 提供可视化拦截:

七、CDN 层屏蔽(推荐)

接入 CDN 后在 CDN 控制台配置 UA/IP 黑名单,恶意请求在 CDN 节点就被拦截,不消耗源站带宽。主流 CDN 还支持“频次访问控制”与“人机验证”,对扫描器效果显著。

八、屏蔽后台目录

织梦 /dede/ 后台是扫描器重点目标:

location /dede/ {
    allow 1.2.3.4;        # 你的办公 IP
    deny all;
    auth_basic "Admin";
    auth_basic_user_file /www/server/nginx/passwd;
}

同时把 /dede/ 改名为不易猜测的目录,并修改 /include/common.inc.php 里的 $cfg_df_admin_dir

九、屏蔽常见扫描路径

location ~ ^/(\.env|\.git|\.svn|phpmyadmin|pma|admin|wp-admin|wp-login) {
    return 444;
}

444 表示 Nginx 直接断开连接,不返回任何内容,节约带宽。

十、注意事项

屏蔽垃圾爬虫是多层防御体系,建议把 robots → Nginx UA → IP 黑名单 → CDN → WAF 五层叠加使用。每周回看一次拦截日志,把新增恶意 UA 及时加入黑名单,让站点带宽与抓取配额集中服务于真正的用户与正规搜索引擎。