绝大多数搭建在香港、美国、日本海外云的 WordPress 独立站、跨境资讯站、多语种商城,长期遭遇恶意爬虫批量抓取:竞品 Scrapy 采集、SEO 扫描机器人、漏洞扫描工具、Python 脚本 7×24 不间断刷页面,导致服务器 CPU、内存、带宽瞬间打满,出现 502 白屏、数据库卡死、谷歌爬虫抓取超时收录暴跌。

很多站长仅靠 robots.txt 限制爬虫,恶意采集工具完全无视协议,治标不治本;也有新手随便写 Nginx 拦截规则,误封 Google、Bing 合法搜索引擎,直接断送海外 SEO 流量。
在这里插入图片描述

本文基于海外 CN / 国际带宽云服务器生产环境实战,完整拆解 User-Agent 识别原理、分级黑名单、可直接复制 Nginx 全套配置(宝塔 / 原生 Nginx 双版本)、防误白名单、搭配限流 / CDN 多层防御方案。

一、底层原理:为什么恶意爬虫靠 User-Agent 就能精准拦截

1、User-Agent 请求头核心作用

每一次浏览器、脚本访问网站,都会携带$http_user_agent头部,标识客户端类型:

合法访客:Mozilla/5.0 Chrome、Safari、Edge 等正规浏览器 UA;

合规搜索引擎:Googlebot、Bingbot、BaiduSpider,需要白名单放行保障收录;

恶意程序:Scrapy、python-request、curl、sqlmap、nessus、zgrab、各类采集机器人,自带固定特征 UA。

2、robots.txt 的致命缺陷

robots 仅道德约束爬虫,竞品采集、漏洞扫描工具直接忽略该文件,无法拦截请求,只能作为辅助手段,不能替代 Nginx 底层拦截。

3、Nginx 拦截优势(海外云专用)

Nginx 在请求进入 PHP / 数据库前置拦截,恶意流量不会占用内存、带宽、MySQL 资源,相比 WP 插件防爬虫,节省 70% 以上服务器开销,低配 1 核 2G 海外云也能抵御大规模抓取。

4、海外站点特殊适配要点

区分欧美合规爬虫(Google/Bing),绝对不能封禁;

多语种站点需放行 Yandex、DuckDuckBot 海外搜索引擎;

海外服务器多 CDN 反向代理场景,配置需开启真实 IP 获取,避免误拦截 CDN 节点;

区分轻量资讯、Woo 商城、AI 素材站,提供宽松 / 严格两套黑名单模板。

二、恶意 User-Agent 完整分类(分黑名单 / 白名单,杜绝误封)

(一)强制拦截黑名单(海外站全部封禁)

爬虫采集框架:Scrapy、python-request、python-urllib、Go-http-client、okhttp、libwww-perl、httrack;

漏洞扫描工具:sqlmap、nikto、nessus、openvas、masscan、acunetix、zgrab;

垃圾 SEO 爬虫:AhrefsBot、SemrushBot、MJ12bot、DotBot、CrawlDaddy;

脚本测试工具:curl、w、PostmanRuntime、Apache-HttpClient;

异常空 UA:无 User-Agent 的批量扫描请求;

伪装垃圾爬虫:各类小众采集机器人(Rogerbot、BLEXBot 等)。

(二)必须白名单放行(封禁直接影响谷歌收录、询盘)

Googlebot、Bingbot、YandexBot、DuckDuckBot、BaiduSpider,写入 Nginx 前置判断,优先放行不进入拦截规则。

(三)可选择性放行(中小型资讯站按需取舍)

Semrush、Ahrefs 这类第三方 SEO 爬虫,不做竞品监控可直接拦截;做外链监测可加入白名单。

三、两套生产级 Nginx 拦截配置(原生 Nginx / 宝塔面板专用)

方案一:原生 Nginx 全局 map 高效配置(推荐,性能最优)

采用map指令统一管理 UA 黑名单,仅匹配一次正则,相比多层 if 判断占用 CPU 更低,适配美国、香港、日本所有海外云,写入nginx.conf最外层 http 块。

1、http 块全局定义黑名单 + 白名单

http {

# 白名单:合法搜索引擎优先放行

map $http_user_agent $allow_seo {

    default 0;

    ~*Googlebot|Bingbot|YandexBot|DuckDuckBot|Baiduspider 1;

}

# 恶意UA黑名单,匹配后标记为1拦截

map $http_user_agent $block_bot {

    default 0;

    "" 1; # 空UA直接拦截

    ~*Scrapy|python-requests|python-urllib 1;

    ~*Go-http-client|okhttp|libwww-perl 1;

    ~*curl|wget|PostmanRuntime|Apache-HttpClient 1;

    ~*sqlmap|nikto|nessus|masscan|acunetix 1;

    ~*AhrefsBot|SemrushBot|MJ12bot|DotBot 1;

    ~*zgrab|httrack|CrawlDaddy|Rogerbot 1;

}

# 全站限速配套,爬虫高频二次拦截

limit_req_zone $binary_remote_addr zone=perip:20m rate=6r/s;

limit_conn_zone $binary_remote_addr zone=conn:20m;

}

2、站点 server 块拦截逻辑(所有域名共用)

放置在 server 块最顶部,优先判断白名单,恶意 UA 直接返回 403 拒绝访问:

server {

listen 80;

server_name yourdomain.com www.yourdomain.com;

# 合法搜索引擎直接放行,跳过拦截

if ($allow_seo = 1) {

    break;

}

# 匹配恶意UA,返回403禁止

if ($block_bot = 1) {

    return 403;

}

# 全站限速兜底,防止伪装爬虫高频抓取

limit_req zone=perip burst=15 nodelay;

limit_conn conn 15;



# 下方原有WP网站配置无需改动

location / {

    try_files $uri $uri/ /index.php?$query_string;

}

}

3、配置生效 & 校验命令

校验配置语法无报错

nginx -t

平滑重载不中断网站

nginx -s reload

方案二:宝塔面板一键配置(海外云宝塔用户专用)

登录宝塔面板 → 网站 → 对应域名 → 配置文件;

拉到最顶部,粘贴白名单 + 拦截 if 代码,无需修改 nginx 主配置;

适配 WordPress 商城,额外加强 xmlrpc 接口拦截(爬虫高频攻击入口):

# 宝塔server头部直接添加

if ($http_user_agent ~* Googlebot|Bingbot|YandexBot) {

    break;

}

if ($http_user_agent ~* (Scrapy|python|sqlmap|AhrefsBot|curl|zgrab|"")) {

    return 403;

}

# 拦截爬虫常用xmlrpc采集接口

location = /xmlrpc.php {

    return 403;

}

# 后台登录严格限速防扫描

location = /wp-login.php {

    limit_req zone=perip burst=5 nodelay;

}

保存配置,点击重载 Nginx 生效。

四、分站点宽松 / 严格两套拦截策略(海外建站按需选用)

策略 1:宽松模式(外贸 Woo 商城、大量 SEO 外链监测)

仅拦截漏洞扫描、Python 采集脚本,放行 Ahrefs、Semrush 第三方 SEO 爬虫,保障外链数据监控;删除黑名单内AhrefsBot|SemrushBot字段。

策略 2:严格模式(纯图文资讯、AI 素材站、无外链监测)

完整启用全部 UA 黑名单,叠加接口限速、图片防盗链,杜绝任何非浏览器批量抓取,适合频繁被竞品抄内容站点。

五、多层叠加防御:仅 UA 拦截不够,海外云完整防抓取架构

单纯 User-Agent 拦截只能屏蔽基础爬虫,高级爬虫会伪造正常浏览器 UA,四层防护彻底杜绝服务器卡死:

第一层:Nginx UA 黑名单(基础前置拦截,零资源消耗)

本文配置,第一道屏障过滤 80% 低级采集、扫描工具。

第二层 Nginx 请求限速(对抗伪装浏览器爬虫)

上面配置limit_req/limit_conn,单 IP 每秒最多 6 次请求,爬虫一秒几十次抓取直接 429 拒绝,即便 UA 伪装也无法刷爆带宽。

第三层 Cloudflare CDN 全球防护(海外站点刚需)

CDN 开启 Bot 管理,自动识别无头浏览器、自动化程序;

设置挑战模式,可疑访客弹出人机验证;

海外静态图片、视频全部 CDN 缓存,大幅降低源站带宽消耗,爬虫无法抓取高清素材。

第四层 WordPress 后台加固(爬虫高频攻击入口)

彻底关闭xmlrpc.php接口(爬虫采集核心通道);

安装轻量缓存插件 WP Rocket,减少数据库查询;

限制 /wp-admin 后台 IP 访问,仅国内办公 IP 放行。

六、海外云服务器部署 6 大避坑误区

误区 1:直接封禁 Googlebot/Bingbot

海外独立站 90% 流量来自谷歌搜索,白名单必须优先放行,一旦误封收录直接清零,询盘暴跌。

误区 2:仅在 location 内写拦截规则

location 层级 if 判断会被 try_files、反向代理覆盖,拦截失效,必须写在 server 块最顶部执行前置判断。

误区 3:不做限速,只靠 UA 拦截

高级爬虫可伪造 Chrome 浏览器 UA,无法通过 UA 识别,必须搭配 limit_req 限速兜底。

误区 4、CDN 反向代理服务器获取不到真实 IP

海外 Cloudflare 节点访问,Nginx 识别到的 UA 为 CDN 节点,需要在宝塔 / Nginx 配置真实访客 IP 转发,否则拦截全部失效。

补充 CDN 真实 IP 配置:

set_real_ip_from 103.21.244.0/22;

set_real_ip_from 104.16.0.0/13;

real_ip_header X-Forwarded-For;

误区 5、拦截后返回 200 空白页面

错误返回 200 会让爬虫持续重试,占用资源,统一返回 403 禁止访问,直接断开连接。

误区 6、一次性写入超长 UA 正则,Nginx 卡顿

推荐使用 map 分段管理黑名单,不要把几十种 UA 写在单条 if 正则,降低 Nginx 正则匹配 CPU 开销。

七、爬虫抓取故障排查实操(海外云运维必备)

1、查看 Nginx 访问日志,定位恶意 UA

宝塔面板:网站日志 → access.log;

原生服务器日志路径:/www/wwwlogs/域名.log;

执行筛选命令查看爬虫访问记录:

# 筛选python、scrapy爬虫访问日志

grep -i "python|scrapy" /www/wwwlogs/xxx.log

2、误封搜索引擎快速排查

日志检索Googlebot,如果出现 403 返回码,代表白名单规则失效,调整 if 判断顺序(白名单必须放在拦截规则上方)。

3、测试拦截规则是否生效

本地 curl 模拟爬虫 UA 访问站点,观察返回码:

# 模拟Python爬虫UA,正常应返回403

curl -A "python-requests/2.31" https://你的域名

八、分海外节点优化补充(香港 / 美西 / 日本云差异化)

香港 CN 云(国内每日运维外贸站)

优先严格 UA 拦截 + CDN bot 防护,晚高峰爬虫抓取极易挤占 5M CN 带宽,导致后台上传卡顿;

美西 100M 大带宽资讯站

带宽充足可选用宽松拦截策略,仅限制漏洞扫描工具,搭配 Cloudflare 分流;

日本 TikTok 素材站点

额外增加日系垃圾爬虫 UA 黑名单,屏蔽 Yahoo 小众采集机器人,保护短视频素材版权。

九、落地总结

1、Nginx 通过 User-Agent 黑名单拦截是海外云服务器最低成本防抓取方案,请求在进入 PHP、数据库前拦截,低配 1 核 2G 香港 / 美西云也能抵御大规模爬虫,避免 CPU / 带宽打满网站卡死;

2、配置核心规范:白名单(Google/Bing 等搜索引擎)必须前置判断,放在恶意 UA 拦截代码上方,杜绝误封海外 SEO 流量;

3、完整四层防御标准:Nginx UA 拦截 + 单 IP 请求限速 + Cloudflare Bot 防护 + WP 后台接口加固,彻底解决伪装爬虫批量采集;

4、选型配置区分:外贸商城用宽松黑名单,素材 / 资讯站启用严格拦截模式,根据业务调整规则;

5、运维排查手段:通过 access 日志筛选恶意 UA,curl 模拟爬虫测试 403 返回码,定期更新黑名单新增采集工具特征。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐