Nginx限流設定

2021-10-22 04:40:17 字數 1692 閱讀 4062

nginx 提供兩種不同的限流方式,分別為ngx_http_limit_req_modulengx_http_limit_conn_module,兩個模組可以搭配使用,其中ngx_http_limit_req_module用來限制請求次數,ngx_http_limit_conn_module限制併發連線數,一般都是以ip為key做限制,ngx_http_limit_req_module更常用

使用方法為limit_req_zonehttp中定義規則,limit_reqhttpserverlocation中使用規則

http
demo 中的規則解析: 以 $binary_remote_addr 為key 定義乙個one規則,其中分配10m空間儲存資訊,每秒鐘允許通過兩次請求,每100ms通過乙個請求

}}限制單個ip併發連線數,網域名稱併發連線數

官方demo

}limit_conn perip 10作用的key 是$binary_remote_addr,表示限制單個ip同時最多能持有10個連線。

limit_conn perserver 100作用的key是$server_name,表示虛擬主機(server) 同時能處理併發連線的總數。

需要注意的是:只有當 request header 被後端server處理後,這個連線才進行計數。

設定白名單

限流主要針對外部訪問,內網訪問相對安全,可以不做限流,通過設定白名單即可。利用 nginxngx_http_geo_modulengx_http_map_module兩個工具模組即可搞定。

在 nginx.conf 的 http 部分中配置白名單:

geo $limit 

map $limit $limit_key

limit_req_zone $limit_key zone=myratelimit:10m rate=10r/s;

geo 對於白名單(子網或ip都可以) 將返回0,其他ip將返回1。

map 將$limit轉換為$limit_key,如果是$limit是0(白名單),則返回空字串;如果是1,則返回客戶端實際ip。

limit_req_zone限流的key不再使用$binary_remote_addr,而是$limit_key來動態獲取值。如果是白名單,limit_req_zone的限流key則為空字串,將不會限流;若不是白名單,將會對客戶端真實ip進行限流。

例如:

location /flv/

Nginx限流設定

hello world成功的必經之路!1.限流演算法 1 令牌限流 演算法思想是 令牌以固定速率產生,並快取到令牌桶中 令牌桶放滿時,多餘的令牌被丟棄 請求要消耗等比例的令牌才能被處理 令牌不夠時,請求被快取。2 漏桶演算法 演算法思想是 水 請求 從上方倒入水桶,從水桶下方流出 被處理 來不及流出...

nginx 限流學習

在當今流量徒增的網際網路時代,很多業務場景都會涉及到高併發。這個時候介面進行限流是非常有必要的,而限流是nginx最有用的特性之一。一般情況下,首頁的併發量很大,即使應用了多級快取,使用者不停的重新整理 也是沒有必要的,甚至有些惡意的請求也會對系統造成影響。其作用可以防止使用者惡意刷爆 控制併發量。...

nginx限流策略

參考 limit req zone binary remote addr zone mylimit 10m rate 2r s server binary remote addr 表示針對每個ip限流 zone mylimit 10m 表示建立乙個大小為 10m 的名為 mylimit 的記憶體區域...