限流演算法一般有兩種:
令牌桶演算法:
思路:1、按照一定速率向令牌桶投送令牌。令牌桶滿,則丟棄令牌 2、當請求過來時候,會經過乙個過濾器,過濾器過濾的請求會經過令牌桶處理。3、請求只有拿到令牌才能被執行,拿不到令牌的請求被快取 4、通過這種方式就能夠控制請求的流量,令牌新增的速度就是請求流量的速度。
漏桶演算法:
思路:請求先進入漏桶,漏桶以一定速率漏水,漏出的水會先處理,當水流遠遠大於漏桶漏水的速率,這個時候,水就會直接溢位。這裡可以把請求當作水,這就是漏桶演算法的大致思路。
nginx中主要通過漏桶演算法來做限流
下面介紹下nginx中限流的主要方式:
//一、單位時間訪問限流
檔案//*http模組中新增:
//限制請求
limit_req_zone $binary_remote_addr $uri zone=api_read:
20m rate=
20r/s;
//說明:上述命令語法為:limit_req_zone key zone rate
//1、key為定義限流物件,這裡的key為$binary_remote_addr,意思是對客戶端ip來進行限流
//2、zone:定義共享記憶體來儲存訪問資訊,api_read:20m 表示大小為20m,名字為api_reda的共享記憶體區域
//1m可以存放16000的ip位址訪問資訊
//3、rate就是訪問速率,表示每秒能夠接收多少請求。20r/s就是每秒最多處理20個請求
//*location模組中新增
limit_req zone=api_read burst=
25 nodelay;
//說明:
//1、zone=api_read共享記憶體資訊
//2、burst=25 burst表示突發流量處理,如果流量突然增大超出rate=20r/s,超出的請求將被拒絕,無法處理突發流量。
//burst就是來解決這個問題的,表示超過設定的處理速率後能額外處理的請求數
//相當於快取佇列中加多了25個坑來存放這些多出的請求,如果請求還是多於這些坑,將被拒絕
//3、nodelay 立即執行 delay延遲執行 (併發超出的請求)```
### 二、限制併發連線數
```bash
檔案//*http模組中新增:
//限制併發連線數量
limit_conn_zone $binary_remote_addr zone=perip_conn:
10m;
//根據ip來限制
limit_conn_zone $server_name zone=perserver_conn:
100m;
//根據server_name來限制
//*location模組中新增
//連線數限制,每個ip併發請求為2
limit_conn perip_conn 2
;//服務所限制的連線數(即限制了該server併發連線數量)
limit_conn perserver_conn 1000
;```
以上就是我所了解的兩種nginx限流的方式,如有錯誤,希望大佬指出
NGINX之安裝篇
今天開始我們一步一步在乙個純淨系統搭建乙個nginx執行環境並進行相關配置.環境搭建 首先要有乙個linux環境,這裡我們使用金山網遊伺服器普遍使用的linux版本centos.centos是基於redhat enterprise linux源 重新編譯並去除redhat徽標的產物。centos完全...
後端開發之Nginx篇 Nginx高階
我們之前使用tomcat作為web容器裝載前後端服務時,我們使用的是springboot的cors來解決跨域的問題,然而當我們使用nginx來請求後端server所對映的靜態資源時,同樣存在跨域的安全性,這就需要我們在 nginx中設定跨域 server其實上面配置的和我們在springboot上面...
Nginx詳解十三 Nginx場景實踐篇之防盜煉
防盜煉 目的 防止資源被盜用 防盜煉設定思路 首要方式 區別哪些請求是非正常的使用者請求 配置語法 valid refer none bloked server names string 預設狀態 配置方法 server location reload一下,再請求 把access.log開啟再重新整...