用nginx實現分布式限流 防DDOS攻擊

2021-10-07 16:05:10 字數 2196 閱讀 4031

1.前言

一般對外暴露的系統,在**或者黑客攻擊時會湧來大量的請求,為了保護系統不被瞬間到來的高併發流量給打垮, 就需要限流 . 

本文主要闡述如何用nginx 來實現限流. 聽說 hystrix 也可以, 各位有興趣可以去研究哈 .

2. 首先部署乙個對外暴露介面的程式

我這裡部署的是乙個spring boot 專案 裡面暴露了如下介面, 很簡單

import org.slf4j.logger;

import org.slf4j.logge***ctory;

import org.springframework.web.bind.annotation.requestmethod;

import org.springframework.web.bind.annotation.restcontroller;

@restcontroller

public class testcontroller

}暴露了乙個 get 請求返回 hello world 的restful 介面.

3.建立乙個名稱為 nginx.conf 的 nginx 配置檔案

建立乙個 名叫 nginx.conf 的配置檔案, 完整內容如下

}}配置檔案中限流部分解釋:

如上, nginx 的限流配置 , 只有兩行**.

第一行: 

#限流配置

limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;

limit_req_zone : 是限流宣告.

$binary_remote_addr: 表示根據客戶端 ip 來 限流, 比如 上面的限流配置 限制每個客戶端ip的請求頻率為一秒一次, 你如果耍流氓一秒兩次, 就會被限流 會返回乙個http 503 錯誤給你. 

zone=perip: 表示 用 perip 這個 名稱 來標識 這行限流配置, 待會 會通過 perip 這個名稱來引用這行限流配置(也就是說限流配置是可以定義為多個的)

10m: 表示儲存客戶端ip的空間為10mb, 1mb 大概儲存1萬多ip , 10 mb 大概 10多萬ip , 參考解釋:    在這篇文章中搜尋 binary_remote_addr 即可定位相關解釋. 

rate=1r/s: 表示頻率是 一秒乙個請求. 

第二行:

location /
即這行: 

limit_req zone=perip;
表示在 myserver 這個集群上, 使用 名稱為 perip 的限流配置

4.用docker 部署 nginx 

將上一步建立的 nginx.conf 配置檔案, 拷貝到linux 目錄 , /root/nginx/ 下 (目錄可以任意), 然後 乙個docker 命令部署好 nginx 環境

docker run --name nginx -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -p 8080:80 -d nginx
這裡暴露的是 8080 埠, 通過 8080 埠可以訪問到 nginx 配置中的負載均衡節點, 即 192.168.10.253:8090  ip埠, 這個 ip埠對應的就是 , 第一步建立部署的 hello world 程式. 

5. 用**訪問 第一步定義的 helloworld 介面

package com.anuo.study.studydistributed;

public class studynginx }}

我這裡是 一秒 執行 10次 get 請求, 已經大於了 nginx中配置的 rate=1r/s  一秒一次的請求, 所以會看到 503 報錯, 如下. 

如果改哈**, 改為一秒執行一次get 請求, 就不會報錯, 各位可以去試一下

至此 nginx 的限流 已實現. 

使用nginx實現分布式限流的方法

1.前言 一般對外暴露的系統,在 或者黑客攻擊時會湧來大量的請求,為了保護系統不被瞬間到來的高併發流量給打垮,就需要限流 本文主要闡述如何用nginx 來實現限流.聽說 hystrix 也可以,各位有興趣可以去研究哈 2.首先部署乙個對外暴露介面的程式 我這裡部署的是乙個spring boot 專案...

redis lua分布式限流

註解反思 我們專案有好幾個介面,呼叫公司中颱的介面,包括定時器的分片執行還有本人的多執行緒強行壓榨,哈哈。最後加上使用者的瘋狂請求,導致中颱的介面偶爾出現問題,主要是資料庫cpu達到100 昨晚專門做了個限流,那麼技術定型使用什麼呢?ratelimiter?這好像是單機才能玩,sentinel?這個...

分布式限流實戰

由於api介面無法控制呼叫方的行為,因此當遇到瞬時請求量激增時,會導致介面占用過多伺服器資源,使得其他請求響應速度降低或是超時,更有甚者可能導致伺服器宕機。限流 rate limiting 指對應用服務的請求進行限制,例如某一介面的請求限制為100個每秒,對超過限制的請求則進行快速失敗或丟棄。限流可...