JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

在nginx中将爬虫过来的请求转到指定的后端服务

wys521 2024-10-20 12:21:35 精选教程 372 ℃ 0 评论

一、前言

一般识别爬虫的方法有两种:

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 http://91donkey_web;
 include proxy.conf;
 access_log /export/home/logs/91donkey/access.log main;
}

2.3、@bots的定义:

location @bots {
 proxy_pass http://91donkey_spider_web;
 include proxy.conf;
 access_log /export/home/logs/91donkey_spider/access.log main;
}

当判断当前请求是爬虫的时候,返回 418 错误码。

通过 error_page 将 418 错误码改为 200 (正常请求响应码),然后进入 @bots 这个 location 进行下一步处理。@bots 中将请求反向代理到你指定的后端应用。

如此便可将正常的用户访问和爬虫访问独立开来,使二者不会互相影响。

作者:龍龍小宝

原文:https://www.cnblogs.com/91donkey/p/11445380.html

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表