nginx基于$http_user_agent的访问控制
1).$http_user_agent的访问控制功能:
user_agent大家并不陌生,可以简单理解成浏览器标识,包括一些蜘蛛爬虫都可以通过user_agent来辨识。
为了减少服务器的压力,其实可以把除主流搜索引擎蜘蛛外的其他蜘蛛爬虫全部封掉。
另外,一些cc攻击,我们也可以通过观察它们的user_agent找到规律。
2).$http_user_agent的访问控制示例:
http_user_agent包含以下类型爬虫的请求,全部返回403状态码
if ($http_user_agent ~ 'YisouSpider|MJ12bot/v1.4.2|YoudaoBot|Tomato') #~是区分大小写,也可写成不区分大小写:~*
{
return 403;
}
测试:
a). #curl -A "123YisouSpider1.0" -I www.1.com #结果匹配 #-A是手动修改User-Agent, 如: -A "xxy1.0",那么User-Agent的值就是:xxy1.0
b). #curl -A "MJ12bot/v1.4.1" -I www.1.com #结果不匹配
3).$user_agent的访问控制示例详解:
[root@localhost ~]# cat /usr/local/nginx/conf/vhost/www.1.conf
server{
listen 80;
server_name www.1.com;
root /data/wwwroot/www.1.com;
index index.html;
if ($http_user_agent ~ 'YisouSpider|MJ12bot/v1.4.2|YoudaoBot|Tomato')
{
return 403;
}
}
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload
[root@localhost ~]# curl -A "123YisouSpider1.0" -I www.1.com #访问时候手动设置User-Agent的值,匹配条件
HTTP/1.1 403 Forbidden
Server: nginx/1.15.9
Date: Thu, 24 Dec 2020 09:17:23 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive
[root@localhost ~]# tail -1 /usr/local/nginx/logs/access.log #查看访问日志的User-Agent的值确认情况
127.0.0.1 - - [24/Dec/2020:17:17:23 +0800] "HEAD / HTTP/1.1" 403 0 "-" "123YisouSpider1.0"
[root@localhost ~]# curl -A "MJ12bot/v1.4.1" -I www.1.com #访问时候手动设置User-Agent的值,不匹配条件
HTTP/1.1 200 OK
Server: nginx/1.15.9
Date: Thu, 24 Dec 2020 09:18:45 GMT
Content-Type: text/html
Content-Length: 6
Last-Modified: Sat, 19 Dec 2020 08:11:31 GMT
Connection: keep-alive
ETag: "5fddb5b3-6"
Accept-Ranges: bytes
[root@localhost ~]# tail -1 /usr/local/nginx/logs/access.log #查看访问日志的User-Agent的值确认情况
127.0.0.1 - - [24/Dec/2020:17:18:45 +0800] "HEAD / HTTP/1.1" 200 0 "-" "MJ12bot/v1.4.1"
$user_agent的访问控制参考链接: https://github.com/aminglinux/nginx/blob/master/access/user_agent.md
4).什么是User-Agent?User-Agent的作用?
User-Agent是http协议中的一部分,属于头域的组成部分,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览...。User Agent也简称UA。用较为普通的一点来说,是一种向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息的标识。UA字符串在每次浏览器 HTTP 请求时发送到服务器!通过user-agent不能完全准确的判断是属于哪款浏览器,但是能大概区分出是哪款类型的浏览器。
b).常见 User-Agent 举例:
(1) Chrome
Win7:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1
(2) Firefox
Win7:
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0
(3) Safari
Win7:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50
(4) IE
Win7+ie9:
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)