1.前言
一般對外暴露的系統,在**或者黑客攻擊時會湧來大量的請求,為了保護系統不被瞬間到來的高併發流量給打垮, 就需要限流 .
本文主要闡述如何用nginx 來實現限流. 聽說 hystrix 也可以, 各位有興趣可以去研究哈 .
2.首先部署乙個對外暴露介面的程式
我這裡部署的是乙個spring boot 專案 裡面暴露了如下介面, 很簡單
暴露了乙個 get 請求返回 hello world 的restful 介面.
將此程式部署到 linux 伺服器上. 部署步奏www.cppcns.com不再贅述, 自行百度 spri boot 部署 即可.
在此我向大家推薦乙個架構學習***。交流學習群號:575745314 裡面會分享一些資深架構師錄製的**錄影:有spring,mybatis,netty原始碼分析,高併發、高效能、分布式、微服務架構的原理,jvm效能優化、分布式架構等這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多
3.建立乙個名稱為 nginx.conf 的 nginx 配置檔案
建立乙個 名叫 nginx.conf 的配置檔案, 完整內容如下
配置檔案中限流部分解釋:
如上, nginx 的限流配置 , 只有兩行**.
第一行:
limit_req_zone : 是限流宣告.
$binary_remote_addr: 表示根據客戶端 ip 來 限流, 比如 上面的限流配置 限制每個客戶端ip的請求頻率為一秒一次, 你如果耍流氓一秒兩次, 就會被限流 會返回乙個http 503 錯誤給你.
zone=perip: 表示 用 perip 這個 名稱 來標識 這行限流配置, 待會 會通過 perip 這個名稱來引用這行限流配置(也就是說限流配置是可以定義為多個的)
10m: 表示儲存客戶端ip的空間為10mb, 1m程式設計客棧b 大概儲存1萬多ip , 10 mb 大概 10多萬ip , 參考解釋: 程式設計客棧m/nginx/ng... 在這篇文章中搜尋 binary_remote_addr 即可定位相關解釋.
rate=1r/s: 表示頻率是 一秒乙個請求.
第二行:
表示在 myserver 這個集群上, 使用 名稱為 perip 的限流配置
4.用docker 部署 nginx
將上一步建立的 nginx.conf 配置檔案, 拷貝到linux 目錄 , /root/nginx/ 下 (目錄可以任意), 然後 乙個docker 命令部署好 nginx 環境
這裡暴露的是 8080 埠, 通過 8080 埠可以訪問到 nginx 配置中的負載均衡節點, 即 192.168.10.253:8090 ip埠, 這個 ip埠對應的就是 , 第一步建立部署的 hello world 程式.
用**訪問 第一步定義的 helloworld 介面
我這裡是 一秒 執行 10次 get 請求, 已經大於了 nginx中配置的 rate=1r/s 一秒一次的請求, 所以會程式設計客棧看到 503 報錯, 如下.
如果改哈**, 改為一秒執行一次get 請求, 就不會報錯, 各位可以去試一下
總結本文標題: 使用nginx實現分布式限流的方法
本文位址:
用nginx實現分布式限流 防DDOS攻擊
1.前言 一般對外暴露的系統,在 或者黑客攻擊時會湧來大量的請求,為了保護系統不被瞬間到來的高併發流量給打垮,就需要限流 本文主要闡述如何用nginx 來實現限流.聽說 hystrix 也可以,各位有興趣可以去研究哈 2.首先部署乙個對外暴露介面的程式 我這裡部署的是乙個spring boot 專案...
redis lua分布式限流
註解反思 我們專案有好幾個介面,呼叫公司中颱的介面,包括定時器的分片執行還有本人的多執行緒強行壓榨,哈哈。最後加上使用者的瘋狂請求,導致中颱的介面偶爾出現問題,主要是資料庫cpu達到100 昨晚專門做了個限流,那麼技術定型使用什麼呢?ratelimiter?這好像是單機才能玩,sentinel?這個...
分布式限流實戰
由於api介面無法控制呼叫方的行為,因此當遇到瞬時請求量激增時,會導致介面占用過多伺服器資源,使得其他請求響應速度降低或是超時,更有甚者可能導致伺服器宕機。限流 rate limiting 指對應用服務的請求進行限制,例如某一介面的請求限制為100個每秒,對超過限制的請求則進行快速失敗或丟棄。限流可...