网站频繁被恶意抓取卡死?海外云服务器 Nginx 屏蔽恶意 User-Agent 指南
绝大多数搭建在香港、美国、日本海外云的 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 返回码,定期更新黑名单新增采集工具特征。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)