nginx 限速之limit_conn的使用
在工作中經常會遇到用戶大量請求某個接口和一些大流量的惡意攻擊,可以通過nginx對同一個ip的連接數(shù),請求,進行限制.
通過nginx我們有三種限速方式分別是: 限制請求數(shù)(request),限制連接數(shù)(connection),限制響應速度(rate),分別對應nginx的limit_req,limit_conn和limit_rate三個模塊,limit_conn和limit_req模塊類似,有許多指令組成一個大的模塊,兩個模塊之間很多指令的命名方式和用法大同小異.
ngx_http_limit_conn_module 模塊主要是用于根據(jù)特定的key來限制連接的數(shù)量,如根據(jù)ip地址來限制連接數(shù).需注意的是并不是所有的連接都會被算入其中,只有當一個連接的整個請求頭被讀取并且已經被nginx服務器處理的時候才會被算入限制中.
1. ngx_http_limit_conn_module模塊
1. limit_conn_zone 指令
#語法配置
Syntax: limit_conn_zone key zone=name:size;
Defaule: -
Context: http #作用域
limit_conn_zone $binary_remote_addr zone=${name}:10m #示例說明:
- limit_conn_zone: 只能夠在http塊用使用
- key: 可以設置為$variable使用Nginx內置變量作為鍵(一般經常使用客戶端ip地址作為鍵:$remote_addr變量的長度為7字節(jié)到15字節(jié),而存儲狀態(tài)在32位平臺中占用32字節(jié)或64字節(jié),在64位平臺中占用64字節(jié)。)$binary_remote_addr變量的長度是固定的4字節(jié),存儲狀態(tài)在32位平臺中占用32字節(jié)或64字節(jié),在64位平臺中占用64字節(jié)。1M共享空間可以保存3.2萬個32位的狀態(tài),1.6萬個64位的狀態(tài))。zone=name定義區(qū)域名稱(名稱隨意起,在limit_conn配置項中調用時對應就好),size定義各個鍵共享內存空間大小。如果共享內存空間被耗盡,服務器將會對后續(xù)所有的請求返回 503 (Service Temporarily Unavailable) 錯誤。
- name: 就是這個zone的命名,name需要全局唯一,limit_conn 命令根據(jù)name來查找對應zone進行相應限制規(guī)則的匹配.
- size: 定義這個zone的大小,也就是nginx會在內存中開辟多大的空間來存儲這個zone的相應信息,主要和前面定義的key的大小有關系,需要注意的是當內存帶下耗盡的時候,nginx會直接返回錯誤碼limit_conn_status給后續(xù)的請求(If the zone storage is exhausted, the server will return the error to all further requests.)
2. limit_conn指令
Syntax: limit_conn zone number; #語法 Default: Context: http,server,location #作用域
說明:
- limit_conn: 使用由limit_conn_zone定義的攔截規(guī)則,并設置具體的限制連接數(shù)量,當超過這個數(shù)字時返回503(server)的錯誤.定義的存儲區(qū)域key對應的總的網(wǎng)絡連接數(shù)進行限流??梢园凑誌P來限制IP維度的總連接數(shù),或者按照服務域名來限制某個域名的總的連接數(shù)(只有那些被nginx處理的且已經讀取了整個請求頭的請求連接才會被計數(shù)器統(tǒng)計,在http,server,location三個塊中使用,但是要搭配limit_conn_zone使用
- zone: 是在limit_conn_zone中的name變量,對應這全局唯一的zone,負責確定限制連接數(shù)的依據(jù)
- number: 限制的連接數(shù),zone和number組合就可以完成連接數(shù)的限定功能,注意number必須是數(shù)字而不能使用變量.
示例:
limit_conn_zone $binary_remote_addr zone=addr:10m;
?
server {
location /download/ {
limit_conn addr 1;
}3. limit_conn_log_level指令
Syntax: limit_conn_log_level info|notice|warn|error #語法 Default: limit_conn_log_level error; #默認 Context: http, server, location #作用域
功能: 當達到最大限制規(guī)則的連接數(shù)后,記錄日志的等級。會輸出到error.log中而不是access.log,調成info的話會有較多的日志輸出,需要額外注意硬盤容量等相關問題。
4.limit_conn_status指令
Syntax: limit_conn_status code Context: http, server, location Default: limit_conn_status 503
功能:當超過限制規(guī)則后,返回的響應狀態(tài)碼,默認是503,如果是一些有特殊需求的場景,可以手動調整為403之類的狀態(tài)碼,需要注意的是并不是所有的狀態(tài)碼都可以使用,nginx官方限定狀態(tài)碼必須在400到599之間。
5.limit_conn_dry_run指令
Syntax: limit_conn_dry_run on | off; Default: limit_conn_dry_run off; Context: http, server, location This directive appeared in version 1.17.6.
功能: dry_run模式的意義在于試運行而不對線上業(yè)務造成影響。設置為on之后,前面的limit_conn指令并不會真正生效,但是limit_conn_zone指令會生效,nginx會在內存中存儲計算相關的數(shù)據(jù).
到此這篇關于nginx 限速之limit_conn的使用的文章就介紹到這了,更多相關nginx limit_conn內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Ubuntu環(huán)境下安裝部署Nginx詳細步驟(有網(wǎng))
Nginx是一個開源的?HTTP?網(wǎng)絡服務器,下面這篇文章主要給大家介紹了關于Ubuntu環(huán)境下安裝部署Nginx(有網(wǎng))的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2024-01-01
nginx+tomcat實現(xiàn)Windows系統(tǒng)下的負載均衡搭建教程
下面小編就為大家分享一篇nginx+tomcat實現(xiàn)Windows系統(tǒng)下的負載均衡搭建教程,具有很好的參考價值,希望對大家有所幫助2017-12-12
Linux中Nginx的防盜鏈和優(yōu)化的實現(xiàn)代碼
今天是周末小編在值班哈,很開森,工作使我快樂,本文重點給大家介紹Linux中Nginx的防盜鏈和優(yōu)化問題及實現(xiàn)代碼,需要的朋友跟隨小編一起看看吧2021-06-06

