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