Nginx实战案例—限制用户的访问

Nginx实战案例—限制用户的访问

1. 为什么要限制用户访问

我们经常会遇到这种情况,服务器流量异常,负载过大等等。对于大流量恶意的攻击访问,会带来带宽的浪费、服务器压力、影响业务,往往考虑对同一个ip的连接数、并发数进行限制。

2. 如何限制用户访问

修改nginx配置文件:

vim /usr/local/nginx/conf/nginx.conf

 33     #gzip  on;
 34     limit_conn_zone $binary_remote_addr zone=addr:10m;  #大小是10M内存,10M的内存用来对于IP传输开销
 35     limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;  #1s中不超过一个请求
 36     server {
 37         listen       80;
 38         server_name  localhost;
 39 
 40         #charset koi8-r;
 41 
 42         #access_log  logs/host.access.log  main;
 43 
 44         location / {
 45             root   html;
 46             index  index.html index.htm;
 47         }   
 48         location /download {
 49                 limit_conn addr 1;  ##只能一个并发,多了会报错
 50                 #limit_rate 50k;    ##限制带宽,每秒最多50k,访问速度会变的很慢
 51         }
nginx -t		#语法检测
nginx -s reload	#在不暂停服务的情况下重新加载

说明:

limit_conn_zone 用来限制同一时间连接数,即并发限制
limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 “leaky bucket”
$binary_remote_addr 是限制同一客户端ip地址
zone=one:10m 表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频此信息
定义一个名为addr的limit_conn_zone

在这里插入图片描述

mkdir /usr/local/nginx/html/download/
cd /usr/local/nginx/html/download/
ls
cd /usr/local/nginx/logs
>access.log 	#清空日志(方便实验效果的观察)

在这里插入图片描述

测试(在真机中):

ab -c 10 -n 1000 http://172.25.1.1/download/huge.jpg	#一次10个并发,一共并发1000(也就是模拟10个人,发送1000个请求)

在这里插入图片描述

查看日至(在server1中):

200就是可以的,503就是服务器端有问题(服务器端发现并发太多了,就会返回503)

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章