Nginx对代理HTTP资源的限制访问

一、限制连接数量

为了限制连接的数量,首先,使用limit_conn_zone指令来定义密钥并设置共享内存区域的参数(工作进程将使用该区域来共享键值的计数器)。作为第一个参数,指定作为关键字计算的表达式。在第二个参数区域中,指定区域的名称及其大小。

limit_conn_zone $binary_remote_addr zone=addr:10m;

其次,使用limit_conn指令在一个位置、一个虚拟服务器或整个HTTP上下文中应用该限制。将共享内存区域的名称指定为第一个参数,并将每个密钥的允许连接的数量作为第二个参数。

        location /download/ {
        limit_conn addr 1;
        }

这里写图片描述

[root@server1 download]# pwd
/usr/local/nginx/html/download
[root@server1 download]# ls
iso7.gif

测试:当访问该内容并发数为1时

[root@foundation7 ~]# ab -c 1 -n 10 http://172.25.7.1/download/iso7.gif
[root@server1 logs]# cat  access.log 

全部访问成功
这里写图片描述
测试:当访问该内容并发数为10时

[root@foundation7 ~]# ab -c 10  -n 10 http://172.25.7.1/download/iso7.gif
[root@server1 logs]# cat  access.log 

只有一次访问成功,其他都是503报错
这里写图片描述


二、限制请求速率

为了限制请求率,首先,使limit_req_zone指令设置密钥和共享内存区域来保持计数器。

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

一旦定义了共享内存区域,在虚拟服务器或位置(或者如果需要的话,在全局上)使用limit_req指令来限制请求率:

location /download/ {
    limit_req zone=one burst=5;
}

三、限制请求带宽

限制每个连接的带宽,使用limit_rate指令:

location /download/ {
    limit_rate 50k;
}

测试:在带宽为50K.速率为1r/s的情况下下载文件
nginx.conf的内容如下:
这里写图片描述
从server1下载,速率受限
这里写图片描述


四、访问权限限制

## 允许250访问,其他主机都被拒绝
        location  /admin/ {
                allow 172.25.7.250;
                deny all;
        }

这里写图片描述
这里写图片描述
当顺序颠倒,所有主机都被限制访问

        location  /admin/ {
                deny all;
                allow 172.25.7.250;
        }

这里写图片描述
这里写图片描述
因为当deny在前所有的请求都被拒绝系统读不到下面的一行allow内容
当allow在前deny在后,allow的信息已经被系统读取过了然后才去读取的deny

五、设置冷数据过期时间

Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求

        location ~ .*\.(gif|jpg|png)$ {
                expires 30d;
        }

在客户端访问图片:
这里写图片描述


六、中文编码无法读取:

[root@server1 www1]# vim  index.html 
www.westos.org  你好

在浏览器访问:出现乱码
这里写图片描述
应对策略:

server{
        listen 80;
        server_name www.westos.org  westos.org;
        charset utf-8;

        location / {
        root /www1; 
        index  index.html;
                }
        }

这里写图片描述

七、nginx的日志

访问静态数据不记录日志:

       location ~ .*\.(gif|jpg|png|js|css)$ {
                expires 30d;
                access_log off;
        }

要求:每天的24点备份日至。
首先编写备份日志的脚本:

#!/bin/bash

cd  /usr/local/lnmp/nginx/logs && mv access.log  access.log_$(date +%F -d -1day)

/usr/local/nginx/sbin/nginx -s reload

加入定时任务中:

[root@server1 opt]# crontab -e
00 00 * * * /opt/nginx_log.sh

执行脚本:

[root@server1 logs]# sh /opt/nginx_log.sh 
[root@server1 logs]# ll
total 288
-rw-r--r-- 1 root root      0 Aug  8 14:39 access.log
-rw-r--r-- 1 root root 244683 Aug  8 14:29 access.log_2018-08-07
-rw-r--r-- 1 root root  34562 Aug  8 14:39 error.log
-rw-r--r-- 1 root root      5 Aug  8 08:51 nginx.pid

八、 Nginx中的防盗链

在做防盗链之前我们先来看看什么时盗链:
盗链是指服务提供商自己不提供服务的内容,自己的网站上向用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。
盗链的模拟:
在客户端www.westos.org指向的是server1,172.25.7.1

[root@server2 html]# vim index.html 
<html>

<body>

<img src="http://www.westos.org/images/iso7.gif">

</body>

</html>

测试:http://172.25.7.2/
server2没有此图片通过盗链而让客户端可获取到此图片
这里写图片描述
防止盗链:
WEB应用防火墙通过实现URL级别的访问控制,对客户端请求进行检测,如果发现图片、文件等资源信息的HTTP请求来自于其它网站,则阻止盗链请求,节省因盗用资源链接而消耗的带宽和性能。

location ~ \.(gif|jpg|png)$ {
                 root /www1;
         valid_referers none blocked  www.westos.org;
        if ($invalid_referer) {
         #       return 403;
                 rewrite ^/ http://bbs.westos.org/daolian.jpg;
         }
         }
      }
  server{
         listen 80;
         server_name bbs.westos.org;

         location / {
                 root  /www2;
                 index index.html;
                 }
     }

当访问1的图片时直接定位至bbs.westos.org防止图片被盗链
再次访问172.25.7.2时:
此图片是我放入bbs的默认发布目录里的
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41476978/article/details/81534928