sycnnj
发布于 2026-01-21 / 14 阅读

【运维实战】Halo博客如何优雅地屏蔽百度等国内爬虫(Docker+Cloudflare版)

在搭建技术博客(尤其是涉及网络技术、VPS测评等灰色领域内容)时,我们往往希望“低调做人”。Google 和 Bing 的收录能带来精准的技术流量,而百度等国内搜索引擎不仅收录效果一般,其爬虫还可能带来无意义的负载,甚至因为某些敏感关键词触发国内的网络审查机制,导致域名被墙。

本文将手把手教你建立 “三道防线”,彻底将国内爬虫拒之门外。

环境说明

  • 博客系统:Halo 2.x (Docker部署)

  • 服务器面板:宝塔面板 (aaPanel)

  • DNS/CDN:Cloudflare

  • Web服务器:Nginx


第一道防线:君子协定 (robots.txt)

robots.txt 是搜索引擎访问网站时查看的第一个文件。我们首先要礼貌地告诉国内爬虫:“这里不欢迎你”。

1. 痛点分析

Halo 是通过 Docker 运行的,直接进入容器内部修改文件既麻烦又容易在更新时丢失。而且,Halo 默认生成的 robots.txt 比较简单,无法自定义。 解决方案:在宿主机创建物理文件,通过 Nginx 强行指定读取路径。

2. 创建文件

登录宝塔面板,进入 “文件” 管理。找到你的 Docker 项目映射目录(注意:Docker版Halo通常不在默认的 wwwroot,而是在类似 /www/dk_project/wwwroot/你的域名 目录下)。

新建一个文件,命名为 robots.txt,粘贴以下内容:

Plaintext

User-agent: *
Allow: /
Sitemap: https://blog.xxx.com/sitemap.xml

# 拒绝百度
User-agent: Baiduspider
Disallow: /
User-agent: Baiduspider-render
Disallow: /

# 拒绝搜狗
User-agent: Sosospider
Disallow: /
User-agent: sogou spider
Disallow: /

# 拒绝神马(阿里)
User-agent: YisouSpider
Disallow: /

# 拒绝360
User-agent: 360Spider
Disallow: /

# 拒绝头条/字节跳动
User-agent: Bytespider
Disallow: /

(注意:请将 Sitemap 链接换成你自己的)


第二道防线:暴力驱逐 (Nginx拦截)

如果爬虫不遵守 robots.txt 硬闯怎么办?我们需要在 Nginx 层直接把它们踢出去(返回 403 Forbidden)。

1. 修改 Nginx 配置

在宝塔面板中,点击 “网站” -> “Docker项目” -> 点击你的域名 -> “配置文件”。 为了防止误改 Docker 的核心反代配置,建议直接点击 “自定义配置文件” 标签页。

2. 注入核心代码

在自定义配置框中,添加以下代码:

Nginx

# --- 爬虫屏蔽规则 Start ---

# 1. 强制指定 robots.txt 读取路径
# 解释:当访问 /robots.txt 时,不转发给 Halo 容器,而是直接读取本地文件
# 注意:root 后面必须是你刚才创建文件的实际文件夹路径
location = /robots.txt {
    root /www/dk_project/wwwroot/blog.xxx.com;
}

# 2. 根据 User-Agent 暴力拦截
# 解释:如果 UA 包含以下关键词,直接返回 403 禁止访问
if ($http_user_agent ~* (Baiduspider|Sogou|360Spider|YisouSpider|Bytespider)) {
    return 403;
}

# --- 爬虫屏蔽规则 End ---

点击 “保存”。此时,如果有人伪装成百度爬虫访问你的服务器,Nginx 会直接拒绝,不再消耗 Halo 的资源。


第三道防线:云端金钟罩 (Cloudflare WAF)

这是最高效的一步。在流量到达你的 VPS 之前,直接在 Cloudflare 的边缘节点进行拦截。既省流量,又隐蔽。

1. 进入 WAF 设置

登录 Cloudflare 控制台,点击你的域名。 在左侧菜单选择 Security (安全性) -> WAF -> Custom rules (自定义规则) -> Create rule (创建规则)

2. 配置拦截规则

  • Rule name: Block China Bots

  • Field (字段): 选择 User Agent

  • Operator (操作符): 选择 contains (包含)

  • Value (值): 输入 Baiduspider

  • 逻辑连接: 点击右侧的 Or (或) 按钮,继续添加 Sogou, 360Spider, YisouSpider, Bytespider 等。

  • Action (动作): 选择 Block (阻止)。

点击 Deploy (部署)


效果验证

配置完成后,我们可以进行简单的测试。

  1. 验证 robots.txt: 浏览器直接访问 https://你的域名/robots.txt。如果看到的是我们自定义的那一长串 Disallow 列表,说明 Nginx 路径映射成功。

  2. 验证拦截效果: 如果你熟悉命令行,可以使用 curl 模拟百度爬虫:

    Bash

    curl -I -A "Baiduspider" https://你的域名
    
    • 如果配置成功,你会看到 HTTP/2 403 Forbidden

    • 如果 Cloudflare 生效,Server 头部会显示 cloudflare

总结

通过这三步操作,我们实现了:

  1. 礼貌拒绝:符合互联网规范的声明。

  2. 本地拦截:防止漏网之鱼消耗服务器资源。

  3. 云端清洗:在大门之外就挡住无效流量,保护源站 IP。

对于同时也运行科学上网服务的博主来说,这种“防御性运维”能有效降低域名被误伤(墙)的概率,强烈建议新站长即刻部署。


本文首发于E路领航 (blog.oool.cc),转载请注明出处