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