日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于nginx上的limit_req_zone模块限流使用与geo与map的白名单配置

發布時間:2024/3/24 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于nginx上的limit_req_zone模块限流使用与geo与map的白名单配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天正好是五一假期 記錄一下前幾天關于開發中遇到的nginx上的問題

之前接口被人扒了 訪問量激增 之前的同事配置了一個nginx上的配置來解決 如下

1.在nginx的http模塊下面加上下面的語句

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

說明:
區域名稱為test,這個名稱自定義即可,占用空間大小為10m,平均處理的請求頻率不能超過每秒十次。

binary_remote_addr是remote_addr(客戶端IP)的二進制格式,固定占用4個字節,這里官方文檔建議使用$binary_remote_addr,原因為保持內存存儲大小相等。

2.在nginx的server模塊下面加上下面的語句

location / {limit_req zone=test burst=20 nodelay ;

說明:
burst表示在超過設定的處理速率后能額外處理的請求數。當rate=10r/s時,將1s拆成10份,即每100ms可處理1個請求。

nodelay針對的是burst 參數,指定了過多請求被延遲的delay限制。默認值為零,即延遲所有過多的請求。

因此,burst往往結合nodelay一起使用。


當時同事就是用這個方法解決了線上的問題,但是這樣導致出了另一個問題,就是這個接口還有其他單位的同事在使用,因為上面的配置是針對全部IP去進行的,所以其他單位的同事就來反饋問題了,于是就有了下面的方法

使用與geo與map的白名單配置

1.在nginx.conf的http部分中配置白名單:

geo $limit {default 1;127.0.0.1 0; } map $limit $limit_key {0 "";1 $binary_remote_addr; } limit_req_zone $limit_key zone=myRateLimit:10m rate=10r/s;

說明:
geo對于白名單(子網或IP都可以) 將返回0,其他IP將返回1。
map將limit轉換為limit_key,如果是limit是0(白名單),則返回空字符串;如果是1,則返回客戶端實際IP。
limit_req_zone限流的key不再使用binary_remote_addr,而是$limit_key來動態獲取值。如果是白名單,limit_req_zone 的限流key則為空字符串,將不會限流;若不是白名單,將會對客戶端IP進行限流。

按照以上的方法配置完了以后,我們在測試環境沒有問題,于是開始上線


!!!注意!!!

我們在上線修改完配置后,出現了另一個問題,這個問題很蠢,但是確實很容易發生,就是nginx的緩存問題

我們在修改完配置文件后,使用 ./nginx -s reload 對nginx進行重啟,發現沒有效果,于是開始排查,配置與測試環境一模一樣,于是繼續修改,加上了access.log,想看一下日志,結果access.log修改完后重啟nginx也沒生效,access.log文件被創建了,但是沒有日志打印上去。

最后的解決方案是使用stop停止nginx服務,再重新啟動,問題完美解決

下面把nginx使用到的指令貼到下面

./nginx:啟動nginx ./nginx -s stop:關閉nginx ./nginx -s reload:重新加載配置 ./nginx -t:檢測配置文件是否正常

總結

以上是生活随笔為你收集整理的关于nginx上的limit_req_zone模块限流使用与geo与map的白名单配置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。