# 屏蔽爬虫请求的四种方式

- Link: https://www.ixiqin.com/2021/02/15/shielding-the-crawler-request-four-ways/
- Published: 2021-02-15T19:20:40+08:00
- Author: 白宦成

文章目录

 [Toggle](https://www.ixiqin.com/2021/02/15/shielding-the-crawler-request-four-ways/#)

 * [1. 屏蔽 UA](https://www.ixiqin.com/2021/02/15/shielding-the-crawler-request-four-ways/#1_%e5%b1%8f%e8%94%bd_ua)
 * [2. 在主机层面屏蔽 IP](https://www.ixiqin.com/2021/02/15/shielding-the-crawler-request-four-ways/#2_%e5%9c%a8%e4%b8%bb%e6%9c%ba%e5%b1%82%e9%9d%a2%e5%b1%8f%e8%94%bd_ip)
 * [3. 在安全组层面屏蔽 IP](https://www.ixiqin.com/2021/02/15/shielding-the-crawler-request-four-ways/#3_%e5%9c%a8%e5%ae%89%e5%85%a8%e7%bb%84%e5%b1%82%e9%9d%a2%e5%b1%8f%e8%94%bd_ip)
 * [4. 在 CDN 层面屏蔽 IP](https://www.ixiqin.com/2021/02/15/shielding-the-crawler-request-four-ways/#4_%e5%9c%a8_cdn_%e5%b1%82%e9%9d%a2%e5%b1%8f%e8%94%bd_ip)
 * [总结](https://www.ixiqin.com/2021/02/15/shielding-the-crawler-request-four-ways/#%e6%80%bb%e7%bb%93)

在进行应用开发的过程中，难免会遇见爬虫爬取数据的。正常情况下，爬虫的数据爬取不应
影响业务系统的正常运行。但毕竟都是人写的代码，难免会出现 Bug ，在 Bug 的情况下，
爬虫可能会对业务系统发起超出日常水平的请求，从而使业务系统开始出现故障。在这种情况
下，就需要对爬虫进行屏蔽。

屏蔽爬虫，由内而外，可以分为四个不同的方式来屏蔽。

## 1. 屏蔽 UA

爬虫一般而言，都会有特殊的 User Agent ，比如 _Baiduspider_ 就是百度的爬虫；_Googlebot_
就是 Google 的爬虫。

在第一阶段，你可以针对 User Agent 进行屏蔽，这部分只需要在 HTTP Server 层面加入相应
的屏蔽代码即可。

以最常用的反向代理服务器 Nginx 为例，你可以在站点的配置文件中添加如下代码来屏蔽百度
和 Google 的爬虫访问。

    ```php
    if ($http_user_agent ~* "Baiduspider|Googlebot")
    {
        return 403;
    }
    Code language: PHP (php)
    ```

上述这段代码可以实现在 Nginx 检测到访问者的 User Agent 包含特定的字符的时候，返回
403 报错，拒绝访问服务。

## 2. 在主机层面屏蔽 IP

除了针对 User Agent ，有些时候是特定的来源的 IP 疯狂的访问，那也可以考虑针对 IP 
进行封禁。

考虑到这部分，最常见的是使用主机自带的防火墙机制，来屏蔽来自特定来源的 IP。以 Linux
为例，可以通过 iptables 来完成相应的功能。

在 Linux 下，输入如下命令，来添加 iptables 屏蔽

    ```shcb-line-numbers
    iptables -I INPUT -s 8.0.0.1 -j DROP
    Code language: CSS (css)
    ```

上述命令，就可以在 iptables 中添加针对 8.0.0.1 的请求，所有来自 8.0.0.1 的请求都会
被抛弃。

## 3. 在安全组层面屏蔽 IP

在如今的业务模式下，大家大多使用的是云服务器。如果你使用的是云服务器，则可以在用户
的请求到达主机之前，直接在云服务商的内部网关层面直接丢弃。

你只需要在现有的安全组规则中新增一条屏蔽特定来源 IP 的规则，就可以实现在安全组层面
上屏蔽特定的 IP。

![](https://postimg.aliavv.com/mbp2021/ktz0r.png)

## 4. 在 CDN 层面屏蔽 IP

现在我们的业务大多会使用 CDN 来完成数据的分发。在这种情况下，服务器获取到请求不是
来自我们要屏蔽的 IP，因此，我们可以直接在 CDN 层面屏蔽掉爬虫的 IP。

现在的云服务商的 CDN 大多提供了 IP 白名单/黑名单的功能，你只需要将需要屏蔽的 IP 
放在黑名单中，就可以实现在 CDN 层面屏蔽 IP。

![](https://postimg.aliavv.com/mbp2021/qm1qk.png)

## 总结

屏蔽爬虫的方式有多种多样，不过最为常见的主要就是这四种。当你找到了爬虫的特征，便
可以很轻松的屏蔽它。
