Nginx對同一IP限速限流

2021-09-07 15:03:53 字數 1009 閱讀 5055

limit_conn_zone是限制同乙個ip的連線數,而一旦連線建立以後,客戶端會通過這連線傳送多次請求,那麼limit_req_zone就是對請求的頻率和速度進行限制。

limit_conn_zone $binary_remote_address zone=addr:10m;

limit_conn addr 2;

有了連線數限制,相當於限制了客戶端瀏覽器和nginx之間 的管道個數,那麼瀏覽器通過這個管道運輸請求,如同向自來水管中放水,水的流速和壓力對於管道另外一端是有影響的。為了防止不信任的客戶端通過這個管道瘋狂傳送請求,對我們的耗cpu的資源url不斷發出狂轟濫炸,必須對請求的速度進行限制,如同對水流速度限制一樣。

limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;

limit_req zone=one burst=10;

burst=10:允許超過頻率rate限制的請求數不多於10個

當每秒請求超過5個,但是在10個以下,也就是每秒請求的數量在5到10之間的請求將被延時 delay,雖然這裡沒有明寫delay,預設是延時,因為漏洞其實類似佇列queue或訊息系統, 當每秒請求數量超過最低速率每秒5個時,多餘的請求將會進入這個佇列排隊等待。如同機場安檢,一次放入5個,多於5個,小於10個的排隊等待,注意:這個佇列或漏洞是以每秒為單位的

如果每秒請求數超過10個,也就是burst的限制,那麼也不排隊了直接回絕,返回503 http。也就是說排隊長度不能超過10個。

如果我們使用nodelay:

limit_req zone=one burst=10 nodelay;

在twitter facebook linkedin這類大型**中,由於訪問量巨大,通常會在http伺服器後面放置乙個訊息佇列,比如apache kafka,用來排隊大量請求,因此,對於中小型**,推薦使用delay方案,而不要寫明nodelay,但是網路上其他各種文章幾乎都是推薦nodelay.

limit_rate 50k;limit_rate_after 500k;

Nginx對同一IP限速限流

nginx通過limit conn zone和limit req zone對同乙個ip位址進行限速限流,可防止ddos cc和flood攻擊,這類文章網上比較多,但是limit req zone中burst漏桶原理說得清楚的卻很少。limit conn zone是限制同乙個ip的連線數,而一旦連線建...

Nginx對同一IP限速限流

limit conn zone是限制同乙個ip的連線數,而一旦連線建立以後,客戶端會通過這連線傳送多次請求,那麼limit req zone就是對請求的頻率和速度進行限制。limit conn zone binary remote address zone addr 10m limit conn a...

nginx限速限流限併發防止攻擊

limit conn zone在http模組內定義,在http server location塊內使用 主要用來限制同乙個ip能與伺服器建立多少個tcp連線 為什麼不說http連線,因為http連線就是基於tcp ip協議的,真正限制的是tcp鏈結數 定義鏈結數限制記憶體塊,以ip位址為key,記憶...