Nginx 下载限速
一、限速介紹
在生產(chǎn)環(huán)境中,為了保護(hù)WEB服務(wù)器的安全,我們都會對用戶的訪問做出一些限制,保證服務(wù)器的安全及資源的合理分配。
限流(rate limiting)是NGINX眾多特性中最有用的,也是經(jīng)常容易被誤解和錯誤配置的,特性之一訪問請求限速。
該特性可以限制某個用戶在一個給定時間段內(nèi)能夠產(chǎn)生的HTTP請求數(shù)。
請求可以簡單到就是一個對于主頁的GET請求或者一個登陸表格的POST請求。
用于安全目的上,比如減慢暴力密碼破解攻擊。通過限制進(jìn)來的請求速率,并且(結(jié)合日志)標(biāo)記出目標(biāo)URLs來幫助防范DDoS攻擊。
一般地說,限流是用在保護(hù)上游應(yīng)用服務(wù)器不被在同一時刻的大量用戶請求湮沒。
限速說的很籠統(tǒng),其實限速分為很多種限速方法:
1)下載速度限速
2)單位時間內(nèi)請求數(shù)限制
3)基于客戶端的并發(fā)連接限速
nginx限速模塊
Nginx官方版本限制IP的連接和并發(fā)分別有兩個模塊:
limit_req_zone 用來限制單位時間內(nèi)的請求數(shù),即速率限制,采用的漏桶算法 “l(fā)eaky bucket”。
limit_req_conn 用來限制同一時間連接數(shù),即并發(fā)限制。
二、應(yīng)用場景
下載限速:限制現(xiàn)在速度及并發(fā)連接數(shù),應(yīng)用在下載服務(wù)器中,保護(hù)帶寬及服務(wù)器的IO資源。
請求限速:限制單位時間內(nèi)用戶訪問請求,防止惡意攻擊,保護(hù)服務(wù)器及資源安全。
三、限速原理
漏桶原理
算法思想是:
水(請求)從上方倒入水桶,從水桶下方流出(被處理);
來不及流出的水存在水桶中(緩沖),以固定速率流出;
水桶滿后水溢出(丟棄)。
這個算法的核心是:緩存請求、勻速處理、多余的請求直接丟棄。
相比漏桶算法,令牌桶算法不同之處在于它不但有一只“桶”,還有個隊列,這個桶是用來存放令牌的,隊列才是用來存放請求的。
四、限速實現(xiàn)
1)單位時間內(nèi)請求數(shù)限制
基于IP對下載速率做限制 限制每秒處理1次請求,對突發(fā)超過5個以后的請求放入緩存區(qū)
http {limit_req_zone $binary_remote_addr zone=baism:10m rate=1r/s;server {location /abc {limit_req zone=baism burst=5 nodelay;} } limit_req_zone $binary_remote_addr zone=baism:10m rate=1r/s;第一個參數(shù):$binary_remote_addr 表示通過remote_addr這個標(biāo)識來做限制,“binary_”的目的是縮寫內(nèi)存占用量,是限制同一客戶端ip地址。
第二個參數(shù):zone=baism:10m表示生成一個大小為10M,名字為one的內(nèi)存區(qū)域,用來存儲訪問的頻次信息。
第三個參數(shù):rate=1r/s表示允許相同標(biāo)識的客戶端的訪問頻次,這里限制的是每秒1次,還可以有比如30r/m的。
第一個參數(shù):zone=baism 設(shè)置使用哪個配置區(qū)域來做限制,與上面limit_req_zone 里的name對應(yīng)。
第二個參數(shù):burst=5,重點說明一下這個配置,burst爆發(fā)的意思,這個配置的意思是設(shè)置一個大小為5的緩沖區(qū)當(dāng)有大量請求(爆發(fā))過來時,超過了訪問頻次限制的請求可以先放到這個緩沖區(qū)內(nèi)。
第三個參數(shù):nodelay,如果設(shè)置,超過訪問頻次而且緩沖區(qū)也滿了的時候就會直接返回503,如果沒有設(shè)置,則所有請求會等待排隊。
3)限制下載速度
server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}location /abc {limit_rate 100k;}} }4)綜合案例
限制web服務(wù)器請求處理為1秒一個,觸發(fā)值為5;
限制并發(fā)連接數(shù)為4;
限制下載速度為100.
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;#基于IP做連接限制 限制同一IP并發(fā)為1 下載速度為100Klimit_conn_zone $binary_remote_addr zone=addr:10m;#基于IP對下載速率做限制 限制每秒處理1次請求,對突發(fā)超過5個以后的請求放入緩存區(qū) limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}location /abc {limit_req zone=one burst=5 nodelay;limit_conn addr 4;limit_rate 100k;}} }總結(jié)
以上是生活随笔為你收集整理的Nginx 下载限速的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx 虚拟主机
- 下一篇: Nginx URL 重写