新手也能学会的反爬虫技术部署指南(Nginx +
新手先了解:常见反爬虫手段怎么选?
反爬虫技术部署并不复杂,但不同场景需要的方案不一样。
对个人站长或中小站点来说,最实用的不外乎三种:限制请求频率(防高频攻击)、拦截特征明显的爬虫(比如空 User-Agent 或已知爬虫 UA)、动态验证码(防自动化脚本)。
本文会带你依次在宝塔面板和 Nginx 配置里把这些功能用起来,全部操作都在可视化界面或简单配置文件中完成,不用写代码。
开始动手前需要准备什么
- 一台已安装宝塔面板(免费版即可)的 Linux 服务器,例如 CentOS 7 或 Ubuntu 20.04。
- 站点已经正常解析并运行(Nginx 环境)。
- 有宝塔面板管理员账号,以及服务器的 SSH 登录权限(备用)。
- 建议先备份站点配置文件(宝塔面板 → 软件商店 → Nginx → 设置 → 配置备份)。
宝塔面板三步搞定频率限制和 IP 黑名单
宝塔面板的 Nginx 防火墙(收费插件)或者 网站管理 → 防盗链/限制 IP 功能都能直接做基础防护。
这里用免费自带的方法:
- 限制单 IP 请求频率
在宝塔面板的 网站 → 选择你的站点 → 设置 → 访问控制 → 频率限制 中开启。
- 设置
单 IP 每秒请求数为 5~10(普通用户足够,爬虫容易触发)。 - 触发后封禁时长设为 300 秒(5 分钟)。
- 点击保存后立即生效。
- 添加 IP 黑名单
如果日志里发现某个 IP 持续爬取,进入 网站设置 → 访问控制 → IP 黑名单,直接粘贴 IP 或网段(例如 192.168.1.0/24),保存即可。
- 限制空 User-Agent 爬虫
很多初级爬虫不设置 UA 头。
在 网站设置 → 反向代理 或 配置文件 中,找到 location / { ... } 区域,添加:
if ($http_user_agent = "") {
return 403;
}
保存设置后重启 Nginx。
这个配置能挡住大部分“裸奔”的爬虫。
Nginx 高级玩法:拦截异常爬虫和限制请求方法
如果你愿意手动改配置文件,还可以做更精细的反爬虫技术部署。
通过 SSH 登录服务器后,编辑站点配置文件(宝塔面板 → 网站 → 设置 → 配置文件),在 server 块内加入:
- 拦截已知恶意爬虫 UA
if ($http_user_agent ~* (Bytespider|HTTrack|Scrapy|python-requests|curl)) {
return 403;
}
这样像 Bytespider、HTTrack 等工具就被拒绝了。
- 限制非 GET/HEAD 请求(防止脚本批量 POST)
if ($request_method !~ ^(GET|HEAD)$ ) {
return 405;
}
(注意:如果你的站点需要 POST 提交,不要加这条,否则正常用户无法提交表单。
)
- 增加 IP 连接频率限制(依赖 ngx_http_limit_req_module)
在 http 块或 server 块中声明:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s;
# 然后在 location 中使用:
limit_req zone=mylimit burst=4 nodelay;
这个配置对每个 IP 每秒只允许 2 个请求,超过的会排队或直接拒绝,能有效压制爬虫。
修改完后记得 nginx -t 测试配置无误,再 systemctl reload nginx 生效。
部署后怎么验证好用,有哪些坑要注意
验证方法
- 用浏览器访问你的站点,看是否正常。
- 在命令行用
curl -A "" https://你的域名测试空 UA 是否返回 403。 - 用
curl -A "python-requests" https://你的域名测试是否被拦截。 - 连续快速刷新页面 10 次,看看是否会触发频率限制(出现 503 或提示)。
避坑说明
- 频率限制数值不要过低:每秒 2~3 次正常用户也可能因为翻页、加载图片而触发,建议先从 10 次/秒开始,观察一周再收窄。
- User-Agent 拦截要小心误杀:一些正规搜索引擎(百度、谷歌)的爬虫 UA 也会包含
curl字样(少见),更好的做法是用白名单模式只放行你需要支持的搜索引擎 UA。 - 不要依赖单一手段:多层防护组合才可靠(IP限频 + UA过滤 + 验证码)。
- 记得定期查看站点访问日志:宝塔面板 → 网站 → 日志 → 错误日志,看是否有大量 403/503 记录,据此调整策略。
如果部署后发现有正常用户被误封,可以先暂时关闭对应规则,调整参数后再开启。
反爬虫技术部署是一个持续优化的过程,没有一劳永逸的方案。