【Day9】Nginx实战训练营

32/33/34/35/36 nginx访问控制

5、Nginx 基于 $user_agent 的访问控制

user_agent 大家并不陌生,可以简单理解成浏览器标识,包括一些蜘蛛爬虫都可以通过user_agent来辨识。

通过观察访问日志,可以发现一些搜索引擎的蜘蛛对网站访问特别频繁,它们并不友好。

为了减少服务器的压力,其实可以把除主流搜索引擎蜘蛛外的其他蜘蛛爬虫全部封掉。

另外,一些cc攻击,我们也可以通过观察它们的user_agent找到规律。

  • 示例:
if ($http_user_agent ~ 'YisouSpider|MJ12bot/v1.4.2|YoudaoBot|Tomato')
{
   
    return 403;
}
  • 说明: user_agent包含以上关键词的请求,全部返回403状态码。

  • 访问测试:
    1、curl -A “123YisouSpider1.0”
    2、curl -A “MJ12bot/v1.4.1”

[root@alexis-01 ~]# curl -x127.0.0.1:80 www.1.com/index.php -A'Tomato' -I
HTTP/1.1 403 Forbidden
Server: nginx/1.16.1
Date: Thu, 31 Dec 2019 13:55:15 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive

[root@alexis-01 ~]# curl -x127.0.0.1:80 www.1.com/index.php -A'Tomasto' -I
HTTP/1.1 404 Not Found
Server: nginx/1.16.1
Date: Sun, 03 Nov 2019 13:55:25 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive

6、Nginx 基于 $http_referer 的访问控制

在前面讲解 rewrite 时,曾经用过该变量,当时实现了防盗链功能。
其实基于该变量,我们也可以做一些特殊的需求。

  • 示例:
  • 背景: 网站被黑挂马,搜索引擎收录的网页是有问题的,当通过搜索引擎点击到网站时,却显示一个博彩网站。
    由于查找木马需要时间,不能马上解决,为了不影响用户体验,可以针对此类请求做一个特殊操作。
    比如,可以把从百度访问的链接直接返回 404 状态码,或者返回一段 html 代码。
if ($http_referer ~ 'baidu.com')
{
   
    return 407;
}

或者

if ($http_referer ~ 'baidu.com')
{
   
    return 200 "<html><script>window.location.href='//$host$request_uri';</script></html>";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值