Skip to main content
Version: 2.8.1

插件機制說明

插件有著重複配置層級、執行優先權之分。

一個插件只會在每一個請求內運行一次,且插件運行的配置是依據當時所配置的實體(如:服務、路由、用戶)。

插件可以被配置在許多實體、實體組合甚至全域 (Global) 的範圍上。這是一種非常彈性的架構,例如:當你想要讓大部分的請求以某種方式配置一個插件,但是讓經過身份驗證的請求行為略有不同時。

插件運行順序說明#

某些插件可能會依賴於其他插件先運行後,本身插件才能運行某些特定邏輯操作。

例如,依賴於用戶身份的插件就必須在身份驗證插件運行之後才能接著運行。

所以考慮到這一點,就有定義了插件之間運行的優先順序。

插件執行順序表#

插件順序數字 (越大代表越優先)
pre-function+inf
zipkin100000
tcp-body-log99999
actived-scheduler99000
api-chain89000
database-log80000
bot-detection2500
cors2000
session1900
alerting1500
acme1007
jwt1005
oauth21004
key-auth1003
ldap-auth1002
basic-auth1001
hmac-auth1000
grpc-gateway998
botw-check-headers995
botw-check-token994
botw-get-ticket993
botw-body-encrypt991
ip-restriction990
request-size-limiting951
acl950
iam945
rate-limiting901
response-ratelimiting900
request-transformer801
response-transformer800
aws-lambda750
azure-functions749
proxy-cache100
gemini-dashboard60
api-history50
extend-adminapi20
prometheus13
http-log12
statsd11
datadog10
file-log9
udp-log8
tcp-log7
loggly6
syslog4
grpc-web3
request-termination2
correlation-id1
api_key0
post-function-1000

同名插件配置優先權說明#

一個插件被多次配置時的完整優先順序(由高到低)是:

  1. 在以下組合配置的插件: 路由、服務、用戶(代表請求必須經過身份驗證)。

  2. 在以下組合配置的插件:路由、用戶(代表請求必須經過身份驗證)。

  3. 在以下組合配置的插件:服務、用戶(代表請求必須經過身份驗證)。

  4. 在以下組合配置的插件:服務、路由。

  5. 在用戶上配置的插件(代表請求必須經過身份驗證)。

  6. 在路由上配置的插件。

  7. 在服務上配置的插件。

  8. 配置範圍為全域 (Global) 的插件。

範例 1

假設 Rate Limiting 插件已被配置兩次:

  • 綁定在服務上:(Config A)
  • 綁定在用戶上:(Config B)

那驗證此用戶的請求就會忽略運行插件 Config A,而運行 Config B

但是,沒有通過用戶身份驗證的請求會改回運行插件 Config A

注意:如果 Config B 被設定為禁用 (enabled 為 false), 原本匹配於 Config B 的請求將會改為運行在 Config A

範例 2

假設 Basic Authentication 插件已被配置兩次,關係如下:

  • 服務 A
    • 插件 Basic Authentication
      (綁定在 服務 A 層級範圍,設置:hide_credentials=true)
    • 路由 v1 (路徑:/api/v1)
      • 插件 Basic Authentication
        (綁定在 路由 v1 層級範圍,設置:hide_credentials=false)
    • 路由 v2 (路徑:/api/v2)
      • 無插件

當請求呼叫的路徑是 /api/v1,代表會經過「路由 v1 層級」的 Basic Authentication 插件,此時運行 Basic Authentication 插件時的配置 hide_credentials 是 false。 雖然 路由 v1 所屬 服務 A,但這個情況下,會以 路由 v1 本身綁定的插件來運行,就不會運行「服務 A 層級」的 Basic Authentication 插件。

當請求呼叫的路徑是 /api/v2,代表會經過「服務 A 層級」的 Basic Authentication 插件,此時運行 Basic Authentication 插件時的配置 hide_credentials 是 true。