防止爬虫采集绝对是一个站长需要做的事;且不说站内资源被爬走,单是爬虫采集时消耗的服务器资源可能就够很多站长心疼了。

本文采用的方式比较原始,首先通过分析 Nginx 日志找出请求最多的 IP,然后将其加入屏蔽名单使其无法访问;

查找爬虫 IP

可运行以下命令:

awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10

其中:

  • access.log:是 Nginx 日志文件

这条命令通过统计 Nginx 日志中每次请求的 IP 地址,找出请求次数最多的 10 个 IP,并排序将其列出;一般来说,在很短时间内单个 IP 或 IP 段存在大量请求,它极有可能是爬虫。

屏蔽 IP 访问

在 Nginx 配置文件目录下新建一个blockip.conf文件,用于管理要屏蔽的 IP;

将爬虫的 IP 地址以以下形式写入blockip.conf文件:

deny IP;

其中:

  • deny:是 Nginx 的访问控制指令,用于禁止特定 IP 或网段访问服务器。
  • IP:要屏蔽的 IP,支持 IPv4 和 IPv6;

将以下内容加入httpserverlocation块中:

include blockip.conf;

需要重启 Nginx 服务才会生效;

对于已屏蔽的 IP 请求,会直接返回403 Forbidden

应小心识别搜索引擎蜘蛛请求和 CDN 回源请求;

更多的屏蔽、放行格式

#屏蔽单个 IP 访问
deny IP;

#允许单个 IP 访问
allow IP;

#屏蔽所有 IP 访问
deny all;

#允许所有 IP 访问
allow all;

#屏蔽 IP 段:
deny IP/24;

也可组合使用:

#允许指定 IP 访问,其他全部拒绝:
allow IP;
deny all;