前言:
此时朋友们对“反爬虫nginx”大体比较着重,我们都想要知道一些“反爬虫nginx”的相关内容。那么小编同时在网摘上网罗了一些有关“反爬虫nginx””的相关文章,希望你们能喜欢,咱们一起来了解一下吧!一、前言
一般识别爬虫的方法有两种:
1、通过dnspod的方式
2、通过UserAgent,这种办法最直接,但也很容易伪造。
二、配置方法
2.1、实现在nginx中使用map指令来匹配一个变量:
map $http_user_agent $is_bot { default 0; ~[a-z]bot[^a-z] 1; ~[sS]pider[^a-z] 1; 'Yahoo! Slurp China' 1; 'Mediapartners-Google' 1; 'YisouSpider' 1; }
在这里我们生成了一个名为 $is_bot 的变量,该变量默认值是 0 ,如果匹配到上述 4 种正则表达式的情况后,值就变成1。你可以继续往 map 中添加新的表达式规则。
2.2、在location中使用该变量:
# 注:不要改写http code状态,可能会导致cdn将原304状态码的数据缓存,进而导致打开具体url时为空白页location / { error_page 418 = @bots; if ($is_bot) { return 418; } proxy_pass ; include proxy.conf; access_log /export/home/logs/91donkey/access.log main;}
2.3、@bots的定义:
location @bots { proxy_pass ; include proxy.conf; access_log /export/home/logs/91donkey_spider/access.log main;}
当判断当前请求是爬虫的时候,返回 418 错误码。
通过 error_page 将 418 错误码改为 200 (正常请求响应码),然后进入 @bots 这个 location 进行下一步处理。@bots 中将请求反向代理到你指定的后端应用。
如此便可将正常的用户访问和爬虫访问独立开来,使二者不会互相影响。
作者:龍龍小宝
原文: