Nginx屏蔽采集爬虫IP:老站长硬核拆解:Nginx屏蔽采集

Nginx屏蔽采集爬虫IP:老站长硬核拆解:Nginx屏蔽采集

技术运维wl5net2026-11-13 1:31:07A+A-
约 3440 字 · 预计阅读 7 分钟

做了六年外贸独立站,我最恨的不是竞争对手降价,而是那群没日没夜盯着你网站“薅羊毛”的采集爬虫。有时候你辛辛苦苦调优半个月的服务器,刚看点流量起色,结果后台一看,好家伙,CPU直接飙到90%,带宽全是那些不知名的蜘蛛在疯狂抓取。面对这种“偷家”行为,Nginx屏蔽采集爬虫IP就是我们最后也是最硬的一道防线。很多新手站长觉得封IP太暴力,怕伤到SEO,但作为在一线踩过无数坑的老兵,我要告诉你:有些垃圾爬虫不封掉,你的站迟早被它们拖垮。

Nginx屏蔽采集爬虫IP:老站长硬核拆解:Nginx屏蔽采集

一、 别乱封!先分清谁是“客”谁是“贼”

在动手写Nginx规则之前,咱们得先理清楚,哪些爬虫是咱们的衣食父母,哪些是来搞破坏的。

  1. 正规军(SEO命脉): Googlebot、Bingbot、Baiduspider。这些是你求爷爷告奶奶请回来的,千万别手抖给封了。
  2. 工具类(中性): 比如AhrefsBot、SemrushBot。虽然它们很占资源,但对SEO调研有参考价值。如果服务器抗压能力强,可以留着;如果配置低,建议限流。
  3. 纯流氓(死敌): 各种Python脚本、Scrapy框架、无名UA(User-Agent)爬虫。这种东西纯粹是为了采集你的原创内容去搞采集站,或者扫描你的系统漏洞,直接杀无赦。

二、 实战第一招:最简单的IP拉黑(单兵作战)

如果你已经在访问日志(access.log)里抓到了现行,确定某个IP正在疯狂刷你的接口,最干脆的方法就是在Nginx里直接把它踢出去。

1. 基础语法

在Nginx的server段或者location段里加入:

# 屏蔽单个恶意IP
deny 123.123.123.123;

# 屏蔽一个IP段(比如某机房的恶意扫描)
deny 123.123.123.0/24;

# 允许某个信任IP,其余全屏蔽
allow 110.110.110.110;
deny all;

2. 避坑指南

  • 别直接写在nginx.conf主文件: 以后你要封几百个IP,主文件会乱成一锅粥。
  • 正确姿势: 创建一个专门的文件,比如deny_ips.conf,然后在主配置里用include引入。

老站长碎碎念: “封IP是体力活,更像是在打地鼠。现在的采集者聪明得很,他们会用拨号IP或者代理IP池。如果你发现封了一个又来十个,那就不能只靠封IP了,得升级手段。”


三、 实战第二招:通过User-Agent识破伪装(降维打击)

很多低级采集程序,虽然换了IP,但它的User-Agent(UA)暴露了它的身份。比如很多Python写的脚本,默认UA里就带着python-requests。

1. 屏蔽特定的垃圾UA

在Nginx配置里加入这种判断:

if ($http_user_agent ~* (Scrapy|Curl|HttpClient|python-requests|Go-http-client)) {
     return 403;
}

2. 进阶版:针对空UA或非法UA

很多恶意攻击连UA都不写,正常浏览器绝对不会这么干。

# 屏蔽空UA
if ($http_user_agent ~ ^$) {
    return 403;
}

适用场景: 这种方法能挡住80%的初级采集脚本。 文案案例: 如果你发现日志里全是 GET / HTTP/1.1" 200 ... "python-requests/2.25.1",别犹豫,直接反手一个403送它走。


四、 实战第三招:限流(Rate Limiting)——温柔的驱逐

有些爬虫(比如Ahrefs)你可能不想完全屏蔽,但它抓取太猛,影响正常用户访问了。这时候我们可以用Nginx的limit_req模块,给它带上“紧箍咒”。

1. 定义限流区域

在http层级定义:

# 每秒只允许同一个IP发起5次请求
limit_req_zone $binary_remote_addr zone=anti_spider:10m rate=5r/s;

2. 应用到具体的Server

server {
    location / {
        # 允许超过频率的请求排队,最多存5个,不延迟处理
        limit_req zone=anti_spider burst=5 nodelay;
        ...
    }
}

老站长心得: “这一招对付那些‘伪装成正常人’的爬虫最管用。它不至于让你直接跟这些工具断交,但能保证你的服务器不会因为它们而宕机。”


五、 实战第四招:自动化防御(老站长的“自动化机枪塔”)

靠人工去日志里翻IP再手动封,这太低效了。作为一个合格的站长,得学会用工具。我推荐两个黄金组合:Fail2ban + Nginx。

1. 逻辑原理

Fail2ban会实时监控你的Nginx访问日志,如果发现某个IP在短时间内报错(比如连续触发403或404)达到一定次数,它就会自动调用防火墙(iptables/nftables)把这个IP封禁一段时间。

2. 简单的Fail2ban配置示例(jail.local)

[nginx-badbots]
enabled  = true
port     = http,https
filter   = nginx-badbots
logpath  = /var/log/nginx/access.log
maxretry = 10
findtime = 60
bantime  = 86400 # 封禁一天

这种方案的优势: 24小时无人值守,专治各种不服的暴力采集器。


六、 特别提醒:用了CDN(如Cloudflare)怎么封?

这是很多新手最容易踩的坑。如果你的网站套了Cloudflare,你直接在Nginx里获取到的IP全是Cloudflare的节点IP。如果你把这些IP封了,等于把正常访客也拒之门外了。

1. 获取真实IP

你需要在Nginx中启用real_ip模块,并告诉Nginx信任CF的IP段:

set_real_ip_from 103.21.244.0/22; # CF的IP段,记得定期更新
real_ip_header X-Forwarded-For;

2. 云端屏蔽

既然用了CDN,最好直接在Cloudflare的后台“安全性 -> WAF -> 速率限制规则”里配置。在云端就把垃圾流量洗掉,连你的服务器带宽都不会占用。


七、 总结与避坑指南

关于Nginx屏蔽采集爬虫IP,最后总结几点干货经验:

维度 建议方案 适用对象 优点
紧急避险 deny IP; 已知恶意IP 见效极快
批量拦截 User-Agent 过滤 脚本/初级爬虫 成本低,覆盖面广
细水长流 limit_req 限流 商业爬虫/高频用户 兼顾SEO与稳定性
长期战役 Fail2ban 自动化 暴力扫描/采集 自动省心

⚠️ 站长避坑细节:

  1. SEO大忌: 封禁之前,一定要去对比一下官方的爬虫IP段。万一把Googlebot封了,你哭都没地方哭。建议配合 Google Search Console 查看抓取错误。
  2. 403 vs 444: 习惯上我们返回 403 Forbidden。但如果你想更狠一点,可以返回 444。这是Nginx内置的一个非标准状态码,作用是直接关闭连接,不给对方回传任何数据,连个字节的流量都不浪费。
  3. 定期清理: 封禁列表不要只增不减。很多动态IP三个月后就变成正常用户了,记得定期review你的封禁名单。

作为老站长,我想说:SEO优化不只是写文章发外链,保障服务器环境的纯净同样重要。 采集器就像苍蝇,你拍得越快,你的网站才能跑得越稳。希望这套方案能帮大家守好自己的那一亩三分地。如果你在操作中遇到具体的报错,欢迎在评论区留言,咱们一起切磋。

点击这里复制本文地址 以上内容由未来技术网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

网站地图 robots.txt 网站死链 关于本站 工信部备案号浙ICP备2026012592号-2 浙公网安备33102402000669号