页面规则

目录结构

|-- page_rules/
  |-- 001-core-rules.yaml
  |-- 002-other-rules.yaml
  |-- ...

在一个 YAML 配置文件中,您可以定义多个页面规则。

参数说明

参数名数据类型是否必选说明
enable_rulebool规则的启用状态(启用或禁用)
conditionsarray规则生效的前置条件集合
actionsdict规则触发后的动作
wafdictWeb 应用防火墙(WAF)配置
cachedict缓存相关配置
contentdict规则命中后将返回指定的内容
proxydict规则命中后将会把请求代理到指定上游
lastbool是否在当前规则匹配后停止处理后续规则

请注意 contentproxy 不应该在同一条页面规则中使用。

更多参数的详细说明和使用示例,请参考以下文档:

配置示例

- enable_rule: true

  conditions:
  - var: uri
    op: eq
    vals:
      - /hello

  waf:
    rule_sets:
      - scanner_detection
      - protocol_enforcement
      - application_attack_xss
      - application_attack_sqli
    sensitivity: medium
    action: "403 Forbidden"
    cross_requests: false

  actions:
    set-proxy-uri:
      uri: /hello/world

  cache:
    cache_key:
      - name: req-header
        args: customid
      - name: 'query-string'
    enforce_cache: true
    default_ttls:
      - ttl_unit: min
        status: 200
        ttl: 300

  proxy:
    retries: -1
    upstream:
    - cluster_type: http
      cluster_name: app_upstream_name1
    - cluster_type: http
      cluster_name: app_upstream_name2
    balancer:
      algorithm: roundrobin
    upstream_el_code: ''
    connect_timeout: 6
    sticky:
      enable: true
      mode: none
      ttl: 1
      key: Edge-Sticky
      level: upstream
    retry_condition:
    - error
    - timeout
    - invalid_header
    - http_500
    - http_502
    - http_504
    send_timeout: 6
    read_timeout: 6

- enable_rule: true
  order: 8
  conditions:
  - var: uri
    op: prefix
    val: /file1
  content:
    type: file
    file: dir1/setup.sh

在第一条页面规则中,当 URI 等于 /hello 时,将触发规则:启动 WAF 规则集,设置代理 URI 为 /hello/world,然后上游服务器为该 HTTP 应用内的 app_upstream_name1app_upstream_name2,并施行缓存策略,缓存的键由请求头中的 customid 和查询字符串组成,缓存的默认生存时间(TTL)设置为 300 分钟。

在第二条页面规则中,当 URI 等于 /file1 时,直接返回静态文件 dir1/setup.sh 的文件内容。