頁面規則 - 條件

頁面規則條件配置中允許定義多個條件,它們之間是邏輯上的關係。這意味著僅當所有條件均滿足時,頁面規則才會被觸發,並執行規則所定義的動作。這些動作可以是頁面規則動作、Web 應用防火牆(WAF)、代理、快取等。

請注意,在頁面規則配置中,雖然條件不是必需的,但至少需要定義一個動作

引數說明

引數名資料型別是否必選說明
varstring 或 array變數名稱,示例包括 uri 或 [‘req-header’, ‘Referer’] 等
opstring運算子
valsstring條件的對比值,可以有多個,它們之間為“或”關係

常見的字串型別“變數名稱(var)”包括:

  • uri:請求的 URI,例如 /hello.html。
  • sorted-query-string:經過排序的查詢引數。
  • query-string:查詢引數。
  • host:主機名。
  • user-agent:使用者代理。
  • scheme:協議型別,可能是 http 或 https。
  • client-country:客戶端所在國家或地區程式碼,如美國是 US、英國是 UK、中國是 CN。
  • client-addr:客戶端 IP 地址。
  • server-addr:伺服器 IP 地址。
  • server-port:伺服器埠號。
  • req-method:HTTP 請求方法,如 CONNECT、DELETE、GET、HEAD、POST、PUT、TRACE、OPTIONS、PATCH 等。
  • first-x-forwarded-addr:X-Forwarded-For 請求頭中的第一個 IP 地址,如 1.1.1.1,2.2.2.2 中的 1.1.1.1
  • last-x-forwarded-addr:X-Forwarded-For 請求頭中的最後一個 IP 地址,如 1.1.1.1,2.2.2.2 中的 2.2.2.2
  • http-version:HTTP 版本號,可能是 2.0、1.1、1.0、0.9。

常見的陣列型別“變數名稱(var)”包括:

  • uri-arg:URI 中的引數,例如 hello.html?username=openresty 中的 username
  • req-header:請求頭資訊,例如 Host: openresty.com 中的 Host
  • req-cookie:請求中的 Cookie,例如 Cookie: token=tokenvalue 中的 token

常用的“運算子(op)”包括:

  • 字串比較運算子:eq(等於),ne(不等於),lt(小於),le(小於或等於),gt(大於),ge(大於或等於)。
  • 字串長度比較運算子:str-len-eq(長度等於),str-len-ne(長度不等於),str-len-lt(長度小於),str-len-le(長度小於或等於),str-len-gt(長度大於),str-len-ge(長度大於或等於)。
  • 正則匹配運算子:prefix(字首匹配),!prefix(字首不匹配),suffix(字尾匹配),!suffix(字尾不匹配),contains(包含),!contains(不包含)。
  • IP 地址比較運算子:~~(IP 匹配),!~~(IP 不匹配)。

示例

通用示例

- enable_rule: true
  conditions:
  - var: uri
    op: eq
    vals:
      - /robots.txt

  actions:
    print:
      content_type: text/html
      msg: 'Hello World'

此示例中,如果請求的 URI 等於 /robots.txt,則會執行動作,列印出 Hello World

- enable_rule: true
  conditions:
  - var:
    - req-header
    - Host
    op: suffix
    vals:
      - openresty.com

  actions:
    print:
      content_type: text/html
      msg: 'Hello World'

在此示例中,如果請求頭中的 Host 字尾與 openresty.com 相匹配,則會執行動作,列印出 Hello World

使用 IP 列表

- enable_rule: true
  order: 5
  conditions:
  - var: client-addr
    op: ~~
    vals:
    - val: global-ip-list1
      type: ip-list
    - val: app-ip-list1
      type: app-ip-list
  actions:
  - set-uri:
      uri: /hello

在此示例中,如果請求的客戶端地址在名為 global-ip-lists1 的全域性 IP 列表或名為 app-ip-list1 的應用 IP 列表中時,將請求的 URI 設定成 /hello

使用使用者變數

- enable_rule: true
  order: 6
  conditions:
  - user_var: hello
    op: prefix
    val: hello
  - global_var: world
    op: prefix
    val: world
  actions:
  - set-uri:
      uri: /anything

在此示例中,如果應用使用者變數 hello 的值字首匹配 hello,並且全域性使用者變數 world 的值字首匹配 world,將會把請求的 URI 設定成 /anything

相關文件