Skip to content

Commit f497c30

Browse files
committed
optimize docs
Signed-off-by: oilbeater <liumengxinfly@gmail.com>
1 parent 8b7bb20 commit f497c30

File tree

1 file changed

+46
-29
lines changed

1 file changed

+46
-29
lines changed

docs/rules.md

+46-29
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
# dslx
2-
dslx的格式为
1+
# DSLX
2+
3+
为了适应复杂情况的流量分发,ALB 提供了一组自定义流量匹配 DSL 名为 dslx。 在 Rule 中可以配置 dslx,最终会生成前序表达式供 ALB 规则引擎进行流量匹配。dslx 的格式如下:
4+
35
```yaml
46
- type: string # matcher
57
key: string (optional)
@@ -9,32 +11,45 @@ dslx的格式为
911
- - string # op 2
1012
- string # condition
1113
```
12-
- type指定具体要匹配什么,目前有 HOST URL SRC_IP METHOD HEADER PARAM COOKIE 这几个matcher
13-
- key指定额外的匹配条件,比如匹配HEADER时,具体是哪一个HEADER.
14-
- 当type是HEADER PARAM COOKIE 时,可以指定具体的KEY
15-
- 通过type和key我们可以明确要匹配的是什么,通过values指定匹配条件
16-
- values是一个表格,每行表示一个匹配条件
17-
- 每行的第一个元素指定匹配条件的操作符
18-
- 行与行之间是OR的关系
14+
15+
- `type` 指定具体要匹配那个属性,目前有 `HOST`,`URL SRC_IP`, `METHOD`, `HEADER`, `PARAM`, `COOKIE` 这几个 matcher。
16+
- 多个 matcher 之间的关系是 `AND`。
17+
- `key` 指定额外的匹配条件,比如匹配 `HEADER` 时,具体是哪一个 `HEADER`:
18+
- 当 `type` 是 `HEADER`, `PARAM` 或 `COOKIE` 时,可以指定具体的 `key`。
19+
- 通过 `type` 和 `key` 我们可以明确要匹配的是哪个属性,通过 `values` 指定匹配条件:
20+
- `values` 是一个表格,每行表示一个匹配条件:
21+
- 每行的第一个元素指定匹配条件的操作符。
22+
- 行与行之间是 `OR` 的关系。
23+
1924
## matcher
20-
| HOST | 请求的域名 |
21-
|--------|--------------------------------------------------------------|
22-
| URL | 请求的url |
23-
| SRC_IP | 请求的源地址,会优先使用x_real_ip或者x_forwarded_for的header |
24-
| METHOD | 请求的方法 |
25-
| HEADER | 请求的header,可以指定key |
26-
| PARAM | url的参数,可以指定key |
27-
| COOKIE | 请求的cookie,可以指定key |
28-
## conditions
29-
| conditions | | |
30-
|-------------|------------------------------------------------|---|
31-
| EQ | 相等 | |
32-
| STARTS_WITH | 前缀匹配 | |
33-
| ENDS_WITH | 后缀匹配 | |
34-
| IN | value在数组内 | |
35-
| RANGE | values是ip,并且在某个ip段内 | |
36-
| EXIST | 存在这个key,比如存在某个header,param,cookie | |
37-
## example
25+
26+
dslx 支持下列字段的匹配:
27+
28+
| 名字 | 描述 |
29+
|--------|----------------------------------------------------------|
30+
| HOST | 请求的域名 |
31+
| URL | 请求的url |
32+
| SRC_IP | 请求的源地址,会优先使用 x_real_ip 或者 x_forwarded_for 的 header |
33+
| METHOD | 请求的方法 |
34+
| HEADER | 请求的 header,可以指定 key |
35+
| PARAM | url 的参数,可以指定 key |
36+
| COOKIE | 请求的 cookie,可以指定 key |
37+
38+
## op
39+
40+
dslx 支持下列的操作符:
41+
42+
| 名字 | 描述 |
43+
|-------------|-----------------------------------------------|
44+
| EQ | 相等 |
45+
| STARTS_WITH | 前缀匹配 |
46+
| ENDS_WITH | 后缀匹配 |
47+
| IN | value 在数组内 |
48+
| RANGE | values 是 IP,并且在某个 IP 段内 |
49+
| EXIST | 存在这个 key,比如存在某个 header,param,cookie |
50+
51+
## Example
52+
3853
```yaml
3954
dslx:
4055
- type: HOST
@@ -48,7 +63,8 @@ dslx的格式为
4863
- - STARTS_WITH
4964
- /b
5065
```
51-
`[AND [EQ HOST a.com] [OR [STARTS_WITH URL /a] [STARTS_WITH URL /a]]`
66+
67+
最终生成的前序表达式为 `[AND [EQ HOST a.com] [OR [STARTS_WITH URL /a] [STARTS_WITH URL /a]]`。
5268

5369
```yaml
5470
dslx:
@@ -88,4 +104,5 @@ dslx的格式为
88104
- "1.1.1.100"
89105
90106
```
91-
为`["AND",["EQ","METHOD","POST"],["OR",["STARTS_WITH","URL","/app-a"],["STARTS_WITH","URL","/app-b"]],["EQ","PARAM","group","vip"],["ENDS_WITH","HOST",".app.com"],["IN","HEADER","location","east-1","east-2"],["EXIST","COOKIE","uid"],["RANGE","SRC_IP","1.1.1.1","1.1.1.100"]]`
107+
108+
最终生成的前序表达式为 `["AND",["EQ","METHOD","POST"],["OR",["STARTS_WITH","URL","/app-a"],["STARTS_WITH","URL","/app-b"]],["EQ","PARAM","group","vip"],["ENDS_WITH","HOST",".app.com"],["IN","HEADER","location","east-1","east-2"],["EXIST","COOKIE","uid"],["RANGE","SRC_IP","1.1.1.1","1.1.1.100"]]`。

0 commit comments

Comments
 (0)