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)

在這裏插入圖片描述

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