摘要:目的了解的和模塊,對(duì)請(qǐng)求訪問(wèn)量進(jìn)行控制。即對(duì)并發(fā)和并行的控制,這兩個(gè)功能分別由和模塊負(fù)責(zé)實(shí)現(xiàn)。模塊說(shuō)明該模塊主要用于對(duì)請(qǐng)求并發(fā)量進(jìn)行控制。
目的
了解 Nginx 的 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模塊,對(duì)請(qǐng)求訪問(wèn)量進(jìn)行控制。
Nginx 模塊化nginx 的內(nèi)部結(jié)構(gòu)是由核心模塊和一系列的功能模塊所組成。模塊化架構(gòu)使得每個(gè)模塊的功能相對(duì)簡(jiǎn)單,實(shí)現(xiàn)高內(nèi)聚,同時(shí)也便于對(duì) Nginx 進(jìn)行功能擴(kuò)展。
針對(duì) web 請(qǐng)求,Nginx 所有開(kāi)啟的模塊會(huì)組成一條鏈,類似于闖關(guān)游戲中的一道道關(guān)卡,每個(gè)模塊負(fù)責(zé)特定的功能,例如實(shí)現(xiàn)壓縮的 ngx_http_gzip_module 模塊,實(shí)現(xiàn)驗(yàn)證的 ngx_http_auth_basic_module 模塊和實(shí)現(xiàn)代理的 ngx_http_proxy_module 模塊等。連接到服務(wù)器的請(qǐng)求,會(huì)依次經(jīng)過(guò)Nginx各個(gè)模塊的處理,只有通過(guò)這些模塊處理之后的請(qǐng)求才會(huì)真正的傳遞給后臺(tái)程序代碼進(jìn)行處理。
對(duì)于 web 服務(wù)器而言,當(dāng)遇到網(wǎng)絡(luò)爬蟲(chóng),或者惡意大流量攻擊訪問(wèn)時(shí),會(huì)造成服務(wù)器內(nèi)存和 CPU 爆滿,帶寬也會(huì)跑滿,所以作為成熟的服務(wù)器代理軟件,需要可以對(duì)這些情況進(jìn)行控制。
Nginx 控制并發(fā)的方法有兩種,一種是通過(guò)IP或者其他參數(shù)控制其并發(fā)量;另外一種是控制單位時(shí)間內(nèi)總的請(qǐng)求處理量。即對(duì)并發(fā)和并行的控制,這兩個(gè)功能分別由 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模塊負(fù)責(zé)實(shí)現(xiàn)。
該模塊主要用于對(duì)請(qǐng)求并發(fā)量進(jìn)行控制。
參數(shù)配置limit_conn_zone
指令配置 limit_conn_zone key zone=name:size
配置的上下文:http
說(shuō)明:key 是 Nginx 中的變量,通常為 $binary_remote_addr | $server_name;name 為共享內(nèi)存的名稱,size 為該共享內(nèi)存的大??;此配置會(huì)申請(qǐng)一塊共享內(nèi)存空間 name,并且保存 key 的訪問(wèn)情況
limit_conn_log_level
語(yǔ)法:limit_conn_log_level info|notice|warn|error
默認(rèn)值:error
配置上下文:http,server,location
說(shuō)明:當(dāng)訪問(wèn)達(dá)到最大限制之后,會(huì)將訪問(wèn)情況記錄在日志中
limit_conn
語(yǔ)法:limit_conn zone_name number
配置上下文:http,server,location
說(shuō)明:使用 zone_name 進(jìn)行訪問(wèn)并發(fā)控制,當(dāng)超過(guò) number 時(shí)返回對(duì)應(yīng)的錯(cuò)誤碼
limit_conn_status
語(yǔ)法:limit_conn_status code
默認(rèn)值:503
配置上下文:http,server,location
說(shuō)明:當(dāng)訪問(wèn)超過(guò)限制 number 時(shí),給客戶端返回的錯(cuò)誤碼,此錯(cuò)誤碼可以配合 error_page 等參數(shù),在訪問(wèn)超量時(shí)給客戶返回友好的錯(cuò)誤頁(yè)面
limit_rate
語(yǔ)法:limit_rate rate
默認(rèn)值:0
配置上下文:http,server,location
說(shuō)明:對(duì)每個(gè)鏈接的速率進(jìn)行限制,rate 表示每秒的下載速度;
limit_rate_after
語(yǔ)法:limit_rate_after size簡(jiǎn)單配置示例
配置上下文:http,server,location
說(shuō)明:此命令和 limit_rate 配合,當(dāng)流量超過(guò) size 之后,limit_rate 才開(kāi)始生效
limit_conn_zone $binary_remote_addr zone=addr:10m; server { listen 80; server_name www.domain.com; root /path/; index index.html index.htm; location /ip { limit_conn_status 503; # 超限制后返回的狀態(tài)碼; limit_conn_log_level warn; # 日志記錄級(jí)別 limit_rate 50; # 帶寬限制 limit_conn addr 1; # 控制并發(fā)訪問(wèn) } # 當(dāng)超過(guò)并發(fā)訪問(wèn)限制時(shí),返回503錯(cuò)誤頁(yè)面 error_page 503 /503.html; }ngx_http_limit_req_module 模塊 說(shuō)明
該模塊主要控制單位時(shí)間內(nèi)的請(qǐng)求數(shù)。使用 “l(fā)eaky bucket” (漏斗)算法進(jìn)行過(guò)濾,在設(shè)置好限制 rate 之后,當(dāng)單位時(shí)間內(nèi)請(qǐng)求數(shù)超過(guò) rate 時(shí),模塊會(huì)檢測(cè) burst 值,如果值為0,則請(qǐng)求會(huì)依據(jù) delay|nodelay 配置返回錯(cuò)誤或者進(jìn)行等待;如果 burst 大于0時(shí),當(dāng)請(qǐng)求數(shù)大于 rate 但小于 burst 時(shí),請(qǐng)求進(jìn)入等待隊(duì)列進(jìn)行處理。
參數(shù)配置limit_req_zone
語(yǔ)法:limit_req_zone key zone=name:size rate=rate
配置上下文:http
說(shuō)明:key 是 Nginx 中的變量,通常為 $binary_remote_addr | $server_name;name 為共享內(nèi)存的名稱,size 為該共享內(nèi)存的大?。籸ate 為訪問(wèn)頻率,單位為 r/s 、r/m 。此配置會(huì)申請(qǐng)一塊共享內(nèi)存空間 name,并且保存 $key 的訪問(wèn)情況;
limit_req
語(yǔ)法: limit_rate zone=name [burst=number] [nodelay|delay=number]
配置上下文:http,server,location
說(shuō)明:開(kāi)啟限制,burst設(shè)置最多容量,nodelay決定當(dāng)請(qǐng)求超量是,是等待處理還是返回錯(cuò)誤碼;
limit_req_log_level 和 limit_req_status 配置參數(shù)左右與ngx_http_limit_conn_module模塊一致;
簡(jiǎn)單配置示例limit_req_zone $binary_remote_addr zone=req:10m rate=2r/m; server { listen 80; server_name www.domain.com; root /path/; index index.html index.htm; location /limit { limit_req zone=req burst=3 nodelay; } # 當(dāng)超過(guò)并發(fā)訪問(wèn)限制時(shí),返回503錯(cuò)誤頁(yè)面 error_page 503 /503.html; }注意
這兩種訪問(wèn)控制都需要申請(qǐng)內(nèi)存空間,既然有內(nèi)存空間,當(dāng)然會(huì)存在內(nèi)存耗盡的情況,這時(shí)新的請(qǐng)求都會(huì)被返回錯(cuò)誤,所以當(dāng)開(kāi)啟訪問(wèn)量限制時(shí),需要通過(guò)監(jiān)控防止此類情況發(fā)生。
小結(jié)通過(guò)對(duì) Nginx 模塊化架構(gòu)的簡(jiǎn)單介紹,重點(diǎn)了解 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模塊的功能和配置參數(shù),實(shí)現(xiàn) Nginx 對(duì)請(qǐng)求的并發(fā)控制。如有不對(duì),還請(qǐng)指教
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40276.html
摘要:被調(diào)用者通過(guò)狀態(tài)通知機(jī)制等來(lái)通知調(diào)用者,或通過(guò)回調(diào)函數(shù)來(lái)處理結(jié)果阻塞和非阻塞關(guān)注的是調(diào)用者等待被調(diào)用者返回調(diào)用結(jié)果時(shí)的狀態(tài)。每當(dāng)就緒,采用系統(tǒng)的回調(diào)函數(shù)之間將放入,效率更高,最大連接無(wú)限制。 一、I/O介紹和Nginx簡(jiǎn)介 1.1 I/O 類型(理解) 同步和異步:關(guān)注的是消息通知機(jī)制; 同步:調(diào)用發(fā)出之后不會(huì)立即返回,但一旦返回,則返回最終結(jié)果;異步:調(diào)用發(fā)出之后,被調(diào)用方立即返回...
摘要:示例說(shuō)明請(qǐng)求的中包含并且以結(jié)尾的,全部禁止訪問(wèn)。測(cè)試鏈接匹配不匹配基于訪問(wèn)控制比多了請(qǐng)求的參數(shù)。訪問(wèn)控制和參數(shù)調(diào)優(yōu)只記錄其中一些部分,有些可能會(huì)在工作中用到,的配置后續(xù)再作筆記吧,春招筆試好難呀,努力學(xué)習(xí)吧 Nginx全局變量 Nginx中有很多的全局變量,可以通過(guò)$變量名來(lái)使用。下面列舉一些常用的全局變量: 變量 說(shuō)明 $args 請(qǐng)求中的參數(shù),如www.123.com/1...
摘要:再結(jié)合模塊來(lái)增強(qiáng)安全性。如查看結(jié)果基本認(rèn)證與地址訪問(wèn)限制相結(jié)合。配置重啟訪問(wèn)不輸入賬戶密碼或賬戶密碼錯(cuò)誤訪問(wèn)常見(jiàn)問(wèn)題右下角錯(cuò)誤點(diǎn)擊可見(jiàn)解決方法在使用時(shí)它會(huì)調(diào)用一個(gè)遠(yuǎn)程驗(yàn)證,在中添加關(guān)閉遠(yuǎn)程驗(yàn)證即可。 1. 用HTTP基本身份驗(yàn)證限制訪問(wèn) 在swagger生成的文檔放在公網(wǎng)上的時(shí)候,就暴露了接口,有了安全隱患。nginx的ngx_http_auth_basic_module模塊為我們提供...
閱讀 1360·2023-04-25 23:42
閱讀 2855·2021-11-19 09:40
閱讀 3534·2021-10-19 11:44
閱讀 3573·2021-10-14 09:42
閱讀 1876·2021-10-13 09:39
閱讀 3843·2021-09-22 15:43
閱讀 679·2019-08-30 15:54
閱讀 1461·2019-08-26 13:32