您好,登錄后才能下訂單哦!
這篇文章主要介紹“nginx如何請求連接限制筆記”,在日常操作中,相信很多人在nginx如何請求連接限制筆記問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”nginx如何請求連接限制筆記”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
之前也有寫過有關于爬蟲的實戰練習:go語言爬取珍愛網
當時爬取時當并發過大的時候,請求就會出現卡死的情況。其實這可能就是珍愛網對請求和連接進行了限制。
爬蟲和反爬是個“一邊攻,一邊守”的技術,但我們親愛的爬蟲工程師們也一直遵守著“只攻不破”的原則。網站服務器對爬蟲一直在做限制,避免服務器流量異常,負載過大,防止惡意的攻擊帶來帶寬和資源的浪費,甚至影響業務正常運行。往往辦法是限制對同一個IP的連接數和并發數進行限制。今天我們就來看看nginx的連接頻率limit_conn_module和請求頻率limit_req_module 限制模塊。
HTTP請求建立在一次TCP連接基礎上,一次TCP請求至少產生一次HTTP請求。
連接限制:
語法如下:
Syntax:limit_conn_zone key zone=name:size; Default: - Context:http
limit_conn_zone:一塊空間,用于存放被限制連接的狀態;
key:鍵,可以說是一個規則,就是對客服端連接的一個標識,比如可以用內置變量 — 客戶端的ip;
zone:就是這塊空間的名字,這個需要和location的配置相對應;
size:就是申請空間的大小。
Syntax: limit_conn zone number; Default: - Context: http, server, location
這里的zone就是上面zone的名字,number就是同一時間連接的限制數。
請求頻率限制:
Syntax: limit_req_zone key zone=name:size rate=rate; Default: - Context: http
語法和上面類似,rate為速率限制,以秒為單位多少個。
limit_req指令:
Syntax: limit_req zone=name [burst=number] [nodelay] Default: - Context: http,server,location
burst=number,重點說明一下這個配置,burst爆發的意思,這個配置的意思是設置一個大小為number的緩沖區當有大量請求(爆發)過來時,超過了訪問頻次限制的請求可以先放到這個緩沖區內,起到訪問限速的作用
nodelay,如果設置,超過訪問頻次而且緩沖區也滿了的時候就會直接返回503(Service Temporarily Unavailable)服務暫時不可用,如果沒有設置,則所有請求會等待排隊。
這兩個默認是不需要配置的。
配置示例如下:
$binary_remote_addr表示二進制的IP地址,一個二進制的ip地址在32位機器上占用32個字節,那么1M可以存放多少呢,計算一下,1x1024x1024/32 = 32768,意思就是可以存放32678個ip地址,在一個會話中,比$remote_addr要節約10空間;
rate=1r/s表示每秒只能有一個請求;
1、
把location下的limit配置都注釋掉,用ab工具(壓力測試工具)測試:
ab -n10000 -c1000 http://192.168.1.6/index.html
這里-n表示請求總數,-c表示同一時間的請求數。
請求之后所有請求都成功:
2、
當只放開limit_req zone=req_zone;注釋后,用壓測工具ab發起同樣的命令后:
可以看到只成功請求3個,因為req_zone配置的rate為每秒一個請求。
3、
當只放開location下limit_req zone=req_zone burst=3 nodelay;注釋時,繼續發起請求:
可以看到,成功了6個,比上一次多了3個。burst=3將3個請求放到緩沖區等下一秒執行。
4、
當只放開limit_conn conn_zone 1;注釋時,使用ab進行測試。此時一個ip只能同一時刻只能建立一個連接。
到此,關于“nginx如何請求連接限制筆記”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。