Bootstrap

nginx基于$http_user_agent的访问控制

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)

;