頁面規則 - 條件
頁面規則條件配置中允許定義多個條件,它們之間是邏輯上的與
關係。這意味著僅當所有條件均滿足時,頁面規則才會被觸發,並執行規則所定義的動作。這些動作可以是頁面規則動作、Web 應用防火牆(WAF)、代理、快取等。
請注意,在頁面規則配置中,雖然條件不是必需的,但至少需要定義一個動作。
引數說明
引數名 | 資料型別 | 是否必選 | 說明 |
---|---|---|---|
var | string 或 array | 是 | 變數名稱,示例包括 uri 或 [‘req-header’, ‘Referer’] 等 |
op | string | 否 | 運算子 |
vals | string | 否 | 條件的對比值,可以有多個,它們之間為“或”關係 |
常見的字串型別“變數名稱(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
。