泰尔克建站

网站防止采集:3个免费工具搞定,别让内容白养

通讯科技行业深度文章,专业内容持续更新

泰
泰尔克编辑部
发布时间:2026/11/3 18:07:19
浏览量:1,286 分类:通讯科技

网站防止采集:3个免费工具搞定,别让内容白养

网站防止采集:3个免费工具搞定,别让内容白养

网站做好了没人访问,是不是比被爬更让人焦虑?其实这两者往往同时发生。你辛辛苦苦写了几百篇原创,SEO做起来了,流量刚有点起色,转头发现百度收录的页面全是别人的站,或者自己的内容被原封不动搬到了竞品首页。更气人的是,你投诉都没地方去,因为对方连个联系方式都没有。

很多站长以为“防止采集”就是搞个验证码,或者把源码混淆一下。大错特错。真正的防护是体系化的,而且不需要花大价钱买商业软件。今天我就用北京某外贸B2B网站做案例,拆解一套利用免费工具实现的网站防止采集方案。这套方案在腾讯云开发者社区的技术博客里也被多次提及,核心逻辑是“提高爬虫成本”+“动态干扰”,而不是死磕“绝对禁止”。

需求分析:你到底防的是谁?

在动手写代码之前,先搞清楚你的敌人是谁。不同身份的采集者,应对策略完全不同。

第一类是搜索引擎蜘蛛。这是朋友,不是敌人。百度、谷歌、必应的爬虫需要抓取内容来收录你的网站。如果把它们全屏蔽了,你的网站就彻底隐形了。所以,任何防止采集的手段,必须给搜索引擎留后门。

第二类是竞争对手的爬虫。这类爬虫通常模仿普通用户浏览器,UA(用户代理)伪装得很像 Chrome 或 Safari。它们的目的是批量下载你的产品页、文章页,甚至整个数据库。这是我们需要重点防御的对象。

第三类是恶意刷流量爬虫。它们不关心内容,只关心并发请求,目的是让你的服务器崩溃,或者通过点击广告赚取点击费。

针对这三类,我们的策略是:

  1. 对搜索引擎蜘蛛:保持开放,但限制频率。
  2. 对疑似竞品爬虫:增加获取数据的难度,比如动态加载、混淆关键数据。
  3. 对恶意爬虫:直接IP封禁,限制并发。

很多小站长犯的错误是“一刀切”,把所有非搜索引擎的IP都封了。结果呢?微信里的分享链接打不开,因为微信的UA不是浏览器;或者某些地区的用户访问变慢,因为CDN节点被误封。这就是典型的“杀敌一千,自损八百”。

环境准备:工欲善其事,必先利其器

咱们不整那些虚头巴脑的理论,直接上工具。这套方案全部基于开源和免费组件,适合 Nginx 或 Apache 环境。如果你用的是 WordPress、ThinkPHP 或其他 CMS,原理通用,只是配置文件的位置不同。

你需要准备以下三个免费工具:

  1. Nginx (或 Apache) 服务器:这是你的防线大门。所有的流量过滤都在这一层完成,性能损耗最小。
  2. ModSecurity 或 OpenResty:如果你用的是 Nginx,推荐配合 OpenResty(Lua 扩展),可以实现更灵活的逻辑判断。如果是 Apache,ModSecurity 是标配。为了教程的通用性,下文以 Nginx + Lua 为主,因为目前国内大部分中小网站都跑在 Nginx 上,尤其是北京、深圳这些技术氛围浓厚的城市,OpenResty 的使用率非常高。
  3. ClamAV (可选,进阶):用于扫描上传文件,防止通过图片、附件植入恶意脚本。对于内容型网站,这个优先级不高,但对于有用户上传功能的商城,这是必须的。

另外,你还需要一个免费的 IP 黑名单库。比如 ThreatFox 提供的恶意 IP 列表,或者国内安全厂商发布的 DDoS 攻击源 IP 库。不要手动去记 IP,那是不可能记全的。利用自动化脚本定期同步黑名单,才是正道。

还有一点容易被忽视:SSL 证书。现在百度已经明确表示,HTTPS 网站在排名上有加权。如果你的网站还没上 SSL,赶紧去 Let's Encrypt 申请一个免费的。虽然它不能直接防止采集,但它是整个安全体系的基石。没有 HTTPS,你的所有 Cookie 和 Session 都是明文传输,采集者可以轻易劫持你的会话,直接拿到后台权限,那比采集内容严重多了。

核心步骤:三道防线层层过滤

防止采集不是一道锁,而是一道迷宫。我们分三层来构建这个迷宫。

第一层:基于 User-Agent 和 Referer 的粗筛

这是最基础的一层,虽然很容易被绕过,但能挡住 80% 的初级爬虫。

在 Nginx 配置中,我们可以设置一个白名单。只有来自百度、谷歌、Bing 等主流搜索引擎的 UA 才允许直接访问核心内容页。其他 UA 的请求,要么直接返回 403,要么跳转到一个“验证页”。

注意:不要完全禁止非搜索引擎 UA,因为很多用户是用微信、QQ、微博内置浏览器打开你的链接的。这些 UA 通常包含 MicroMessenger 或 QQ/。我们要做的是区分“普通用户”和“机器”。

一个粗略的判断标准是:请求频率。人类浏览网页,两次请求之间通常有几秒的间隔,而且鼠标会移动、页面会滚动。而爬虫是并发的,请求间隔极短,且没有前端交互行为。

第二层:动态混淆与关键数据加密

这是防止采集的核心。如果你的 HTML 源码里直接写着 <h1>产品标题</h1> 和 <p>价格:99元</p>,那采集脚本一行 select("h1").text() 就全拿走了。

我们要做的是:让前端看到的,和源码里写的,不一样。

具体做法是:

  1. 关键数据通过 API 异步加载。比如产品名称、价格、库存,不要在初始 HTML 中渲染,而是页面加载后,JS 调用接口获取。
  2. 接口参数加密。调用接口时,传递一个由时间戳、URL、随机数生成的 Token。服务端校验 Token 的有效性,过期即失效。
  3. CSS 隐藏与字体图标。对于不想被采集的文字,可以使用 Web Font(自定义字体文件),将文字映射为特殊的 Unicode 码点。爬虫抓取到的是一堆乱码,除非它下载字体文件并解析映射关系,否则无法还原。

这种方法在电商网站非常常见。比如淘宝、京东,你右键“查看源代码”,很多价格其实是加密后的字符串,或者由 JS 动态生成的。

第三层:行为分析与 IP 限流

这是最后一道防线,也是最高级的。利用 Nginx 的 limit_req_zone 指令,对每个 IP 的请求速率进行限制。

如果某个 IP 在 1 秒内请求超过 10 次,直接返回 429 (Too Many Requests) 状态码。如果持续高频请求,自动将该 IP 加入临时黑名单,封禁 10 分钟到 1 小时。

对于北京地区的企业站,还需要注意一点:跨省转介办理差异。如果你的网站部署在阿里云北京节点,但主要用户在广东、上海,那么 CDN 的加速和节点分布就显得尤为重要。有时候,采集者会利用不同地区的 IP 轮换来绕过单点 IP 限流。这时候,你需要结合 CDN 厂商提供的“IP 信誉库”进行判断。腾讯云开发者社区曾发布过一篇关于《基于行为指纹的爬虫识别实践》的文章,其中提到,单纯依靠 IP 是不可靠的,必须结合 TLS 指纹、HTTP 头顺序等底层特征进行综合判断。

代码/配置示例:拿来就能用

废话少说,直接上代码。以下配置适用于 Nginx 1.18+ 版本。

示例 1:Nginx 基础防采集配置

# 定义一个限流区域,名字叫 limiter,按 IP 哈希,内存大小 10MB,速率 10r/s
limit_req_zone $binary_remote_addr zone=limiter:10m rate=10r/s;server {listen 80;server_name www.yourdomain.com;# 1. 限制请求速率,超过 5 个并发等待,超过 10 个直接拒绝limit_req zone=limiter burst=5 nodelay;# 2. 禁止常见的爬虫 UA,但保留搜索引擎if ($http_user_agent ~* (bot|spider|crawler|slurp)) {# 检查是否是主流搜索引擎if ($http_user_agent !~* (Baiduspider|Googlebot|bingbot)) {return 403;}}# 3. 禁止 Referer 为空的高频请求(可选,需谨慎)# 注意:很多正常用户直接输入 URL,Referer 也是空的,所以这招慎用# 建议配合 JS 检测使用location / {root /var/www/html;index index.html;# 4. 对敏感目录直接禁止访问deny all;}# 5. 对静态资源设置缓存,减少服务器压力location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;add_header Cache-Control "public";# 静态资源不需要限流,否则用户体验很差}
}

关键行解释:

  • limit_req_zone:这是 Nginx 原生的限流模块,性能极高。
  • if ($http_user_agent ~* ...):正则匹配,注意大小写不敏感。
  • return 403:直接拦截,不消耗后端资源。

示例 2:Lua 动态混淆脚本 (OpenResty)

如果你装了 OpenResty,可以用 Lua 实现更复杂的逻辑。比如,检测请求头中是否包含 X-Forwarded-For(通常代理会带这个头),如果带了这个头且 IP 不在白名单,就返回一个假的 200 页面,里面全是乱码。

-- conf.lua 配置示例
local ip = ngx.var.remote_addr
local ua = ngx.var.http_user_agent-- 简单的白名单判断,实际项目中应查库
local whitelist = {["127.0.0.1"] = true,["192.168.1.100"] = true
}-- 如果 IP 不在白名单,且 UA 可疑
if not whitelist[ip] and (ua:find("bot") or ua:find("python") or ua:find("curl")) thenngx.status = 200ngx.header["Content-Type"] = "text/html"-- 返回一堆无意义的 HTML,增加爬虫解析成本ngx.say("<html><body><div id='content'>")for i=1, 1000 dongx.write("Lorem ipsum dolor sit amet, consectetur adipiscing elit. ")endngx.say("</div></body></html>")return ngx.exit(200)
end-- 正常请求,继续执行后续逻辑
ngx.exec("@main")

注意:这段代码只是一个思路。在实际生产环境中,你需要更复杂的逻辑,比如检查请求时间戳、检查 TLS 指纹(需要 lua-resty-tls 模块)等。

常见报错:踩坑实录

在实施这套方案的过程中,我见过太多站长因为配置不当导致网站“自杀”。这里列出几个最常见的坑。

坑一:误封微信内置浏览器。 现象:用户反馈在微信里打开网站显示 403 或空白。 原因:微信内置浏览器的 UA 通常包含 MicroMessenger,但有时会被误判为机器人。 解决:在 Nginx 配置中,将 MicroMessenger 加入白名单,或者使用更精细的 UA 判断逻辑。

坑二:SSL 证书链不完整。 现象:Chrome 浏览器显示“您的连接不是私密连接”,但 Firefox 正常。 原因:很多免费证书(如 Let's Encrypt)只提供了域名证书,没有提供中间证书。Chrome 对证书链校验更严格。 解决:下载证书时,务必下载“Fullchain”版本,它包含了域名证书和中间证书。或者使用 caddy、nginx-proxy-manager 等自动化工具,它们会自动处理证书链。

坑三:限流导致正常用户卡顿。 现象:网站在高峰时段,很多用户反馈加载缓慢,甚至超时。 原因:limit_req 的 burst 设置太小,或者 rate 设置太低。 解决:监控 Nginx 的访问日志,统计正常用户的平均请求频率。通常,一个活跃用户在 10 秒内不会超过 5 次请求。将 rate 设为 5r/s,burst 设为 10,是比较安全的值。同时,开启 nodelay 参数,让等待的请求立即处理,而不是排队。

坑四:跨省 CDN 节点同步延迟。 现象:北京服务器更新了内容,广州用户半天后还是看到旧内容。 原因:CDN 缓存 TTL 设置过长,或者节点之间同步机制有问题。 解决:对于核心内容页,设置较短的缓存时间(如 5 分钟)。对于静态资源,设置较长的缓存时间(如 30 天),但文件名要带版本号(如 style.v123.css),这样更新时可以强制刷新缓存。

小结:安全是动态的,别指望一劳永逸

网站防止采集,没有银弹。你用了这套方案,爬虫也会升级他们的工具。今天的“防采集”,可能就是明天的“靶场”。

但我认为,提高成本是性价比最高的策略。如果采集者需要写复杂的脚本、下载字体文件、破解 Token、绕过 IP 限流,他们的成本就会远高于直接采集其他站点的收益。这时候,他们自然会选择放弃你的网站,去爬那些不设防的目标。

回到开头的问题:网站做好了没人访问,怎么办?答案是,先把基础打牢。一个被采集、被刷、被黑的安全隐患重重的网站,搜索引擎是不会给好排名的。百度、谷歌的算法都在不断优化,能够识别并降权那些内容被大量复制、服务器响应异常、安全性差的网站。

所以,不要觉得做安全是“额外的工作”。它是 SEO 的一部分,是用户体验的一部分,是品牌信誉的一部分。

用 Nginx 的免费限流模块,加上一点 Lua 的动态混淆,再配合 CDN 的 IP 信誉库,这套组合拳下来,足以应付 90% 的采集场景。剩下的 10%,交给时间和运气。

最后,抛出一个问题给大家讨论:你的网站建站花了多少钱?是外包几千块,还是自己写代码免费工具搞定?留言说说真实价格,看看咱们这行到底被多少“中间商”赚走了差价。

❖
通讯科技行业动态技术分享

这篇文章对您有启发吗?

泰尔克建站专注通讯科技官网定制,8年服务280+通讯科技企业,预约免费方案沟通。

本周热门

今日推荐

本月精选

需要为您的通讯科技企业定制专业官网?

泰尔克建站提供从整站搭建、设计开发到SEO运维的全链路服务,预约免费方案沟通。