1
- # dslx
2
- dslx的格式为
1
+ # DSLX
2
+
3
+ 为了适应复杂情况的流量分发,ALB 提供了一组自定义流量匹配 DSL 名为 dslx。 在 Rule 中可以配置 dslx,最终会生成前序表达式供 ALB 规则引擎进行流量匹配。dslx 的格式如下:
4
+
3
5
``` yaml
4
6
- type : string # matcher
5
7
key : string (optional)
@@ -9,32 +11,45 @@ dslx的格式为
9
11
- - string # op 2
10
12
- string # condition
11
13
` ` `
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
+
19
24
# # 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
+
38
53
` ` ` yaml
39
54
dslx:
40
55
- type: HOST
@@ -48,7 +63,8 @@ dslx的格式为
48
63
- - STARTS_WITH
49
64
- /b
50
65
` ` `
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]]`。
52
68
53
69
` ` ` yaml
54
70
dslx:
@@ -88,4 +104,5 @@ dslx的格式为
88
104
- "1.1.1.100"
89
105
90
106
` ` `
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