在搭建技术博客(尤其是涉及网络技术、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 BotsField (字段): 选择
User AgentOperator (操作符): 选择
contains(包含)Value (值): 输入
Baiduspider逻辑连接: 点击右侧的
Or(或) 按钮,继续添加Sogou,360Spider,YisouSpider,Bytespider等。Action (动作): 选择
Block(阻止)。
点击 Deploy (部署)。

效果验证
配置完成后,我们可以进行简单的测试。
验证 robots.txt: 浏览器直接访问
https://你的域名/robots.txt。如果看到的是我们自定义的那一长串Disallow列表,说明 Nginx 路径映射成功。验证拦截效果: 如果你熟悉命令行,可以使用
curl模拟百度爬虫:Bash
curl -I -A "Baiduspider" https://你的域名如果配置成功,你会看到
HTTP/2 403 Forbidden。如果 Cloudflare 生效,Server 头部会显示
cloudflare。
总结
通过这三步操作,我们实现了:
礼貌拒绝:符合互联网规范的声明。
本地拦截:防止漏网之鱼消耗服务器资源。
云端清洗:在大门之外就挡住无效流量,保护源站 IP。
对于同时也运行科学上网服务的博主来说,这种“防御性运维”能有效降低域名被误伤(墙)的概率,强烈建议新站长即刻部署。
本文首发于E路领航 (blog.oool.cc),转载请注明出处