orange(3)插件功能分析(property

property_rate_limiting 防刷插件

1 nginx 【init phase】

1.1 配置插件優先級1000

PropertyRateLimitingHandler.PRIORITY = 1000

注意:priority值越大優先級越高,針對相同phase階段內的插件生效。

1.2 重寫access函數

插件處於【access phase】階段

2 此插件的處理邏輯

通過 提取器extractor從以下對象中提取關鍵參數項

  • Query
  • Header
  • Cookie
  • PostParams
  • Host
  • URI
  • IP
  • Method

用於標記請求,併為此請求記錄訪問次數,當具有某些特徵的請求達到單位時間內訪問次數限制的時候,既直接返回429(訪問次數太多)應答,不再轉發請求到後端服務。

注意:此插件的功能就在於標記請求,限制各個被標記請求單位時間(秒,分鐘,小時,天)的訪問次數;關鍵點就是此插件並不是達到訪問次數限制後,整個接口都限制,只是限制具有某些特徵參數的接口請求。

場景:結合公司saas業務,不同商家的前端訪問域名相同,通過不同的flag來來區分商家,可以將此flag作為關鍵參數標記不同商家的訪問請求,進而限制單位時間內的訪問速率,如一分鐘內訪問接口不超過10次,一天訪問總次數不超過5000次。

3 dashboard配置

3.1 啟用 property_rate_limiting插件

orange(3)插件功能分析(property_rate_limiting)


3.2 創建選擇器,選擇“自定義流量”


儘量不要用“全流量”,相率更高一些

orange(3)插件功能分析(property_rate_limiting)

3.3 提取 flag請求參數來標記請求

限制訪問頻率為1分鐘內10次,超過則返回 429。

orange(3)插件功能分析(property_rate_limiting)

orange(3)插件功能分析(property_rate_limiting)


4 代碼邏輯

  • nginx.conf 配置文件中 http節,指定 lua_shared_dict property_rate_limiting 10M空間,用來本地存放記錄請求訪問次數。
  • extractor提取的參數作為key,次數作為value存儲在property_rate_limiting中,在首次設置值的同時會指定過期時間,過期時間根據頻率限制的秒,分鐘,小時,還是天來區分,首次設置次數值的時候指定expire過期時間,之後則是更新。時間到了下一個週期時,會從新設定,上一個週期的值會因為過期自動被清理掉。


分享到:


相關文章: