Version: 2.3.3
Response Rate Limiting
#
用途說明可限制從服務回傳並攜帶客製的標頭之回應數量。可隨意設定多組rate-limiting物件,其中可以對秒、分、時、日、月或是年做設定。如果開啟此插件之服務或是路由沒有開啟其它驗證類的插件,則客戶端IP地址會被使用;反之,則會使用用戶資訊。
#
欄位配置說明變數 | 類型 | 預設值 | 說明 | 必填 |
---|---|---|---|---|
limits.{limit_name} | string | 可以設定的客製化物件列表, {limit_name} 可以填入任意值。 | V | |
limits.{limit_name}.second | number | 每一秒可通過請求數量。 | V | |
limits.{limit_name}.minute | number | 每一分鐘可通過請求數量。 | V | |
limits.{limit_name}.hour | number | 每一小時可通過請求數量。 | V | |
limits.{limit_name}.day | number | 每一日可通過請求數量。 | V | |
limits.{limit_name}.month | number | 每一個月可通過請求數量。 | V | |
limits.{limit_name}.year | number | 每一年可通過請求數量。 | V | |
header_name | string | 計數器會計算之回應標頭名稱。 | ||
block_on_first_violation | boolean | false | 決定是否在達到其中一項限制值時就阻擋其它請求。 | V |
limit_by | string | consumer | 用來統計限額的實體,可為 consumer 、 credential 、 ip 。如選擇的實體無法確認其值,則系統會自動選擇 ip 。 | |
policy | string | cluster | 用來計算限額的方針,可選擇的選項有: * local : 計算機會儲存在節點內的本地的記憶體* cluster : 計算機儲存在datastore並且分享給不同節點* redis :計算機儲存在Redis伺服器上並且分享給不同節點 | |
fault_tolerant | boolean | true | 當連線至第三方之datastore有問題時決定是否被代理。當設定為 true 時,請求會被代理,並且速率限制之功能會被關閉直到datastore恢復運作。如設定為 false ,客戶端會直接收到 500 的錯誤回應。 | V |
hide_client_headers | boolean | false | 是否在回應時隱藏rate limit相關資訊之標頭。 | V |
redis_host | string | 當使用 redis 方針時,需填入Redis伺服器位置。 | V | |
redis_port | interger | 6379 | 當使用 redis 方針時,需填入Redis伺服器通訊埠。 | |
redis_password | string | 當使用 redis 方針時,需填入連線至Redis伺服器之密碼。 | ||
redis_timeout | number | 2000 | 當使用 redis 方針時,需填入傳送任何請求至Redis伺服器之可接受連線時間,單位為 豪秒 (milliseconds)。 | |
redis_database | interger | 0 | 當使用 redis 方針時,需填入Redis使用之資料庫。 |
note
second、minute、hour、day、month、year必須填入其中至少一項,也可同時填入多項。
#
用法示例#
在全局啟用插件- 從網站左邊Menu中
外掛插件
頁面中,點選右上角的新增外掛插件
:
- 點選後,選擇
流量控管
頁籤,並啟用Response Rate Limiting,填寫內容參考欄位配置說明,設定成功後,任何請求(不分服務、路由、用戶)皆需經過計算才能通過。
#
在服務端上啟用插件- 從網站左邊Menu中
服務 > 服務列表
頁面中,選擇要啟用此插件的服務,假設為google
,點選對應的編輯按鈕:
- 在編輯畫面中,點選上方的
外掛插件
頁籤,再點選頁籤內容上方的新增外掛插件
按鈕:
點選後,選擇 流量控管
頁籤,並啟用Response Rate Limiting,填寫內容參考欄位配置說明,設定成功後,僅有此服務(範例為google
)請求需經過計算才能通過。
#
在路由端上啟用插件可以由兩種方式來選擇路由,並啟用插件:
#
方式一:路由列表- 從網站左邊Menu中
服務 > 路由列表
頁面中,選擇要啟用此插件的路由,假設為google
,點選對應的編輯按鈕:
#
方式二:服務 > 服務列表 > 路由列表- 從網站左邊Menu中
服務 > 服務列表
頁面中,選擇要啟用此插件的路由 所屬之服務(假設為google
),點選對應的編輯按鈕。
在編輯畫面中,點選上方的 路由
頁籤,選擇要啟用此插件的路由(假設為google
),點選對應的編輯按鈕:
- 承第1步,點擊上述兩種方式之一的編輯按鈕後,在編輯畫面中,點選上方的
外掛插件
頁籤,再點選頁籤內容上方的新增外掛插件
按鈕:
點選新增外掛插件
按鈕後,選擇 流量控管
頁籤,並啟用Response Rate Limiting,填寫內容參考欄位配置說明,設定成功後,僅有此路由(範例為google
)請求需經過計算才能通過。
#
在用戶端上啟用插件- 從網站左邊Menu中
訂閱用戶 > 用戶列表
頁面中,選擇要啟用此插件的用戶,假設為portaladmin
,點選對應的編輯按鈕 :
- 在編輯畫面中,點選上方的
外掛插件
頁籤,再點選頁籤內容上方的新增外掛插件
按鈕:
點選後,選擇 流量控管
頁籤,並啟用Response Rate Limiting,填寫內容參考欄位配置說明,設定成功後,僅有此用戶(範例為portaladmin
)請求需經過計算才能通過。
#
驗證新增一個服務及路由,並在路由底下開啟此插件。
服務需在回應時帶有設定在
header_name
的標頭,並且其值帶入設定的limit_name以及單位。格式如下:
範例:
- 當收到帶有設定值的標頭,會收到回應包含類似以下內容:
note
代入limitname的值為計算時減少的次數,如果填寫成 limitname=2 ,在接收到回應時,會收到 xxx-Remaining-Test-xxx 的值一次減少2。