规则引擎接口
更新时间:2026-09-07
规则引擎接口
设置规则引擎配置
您可以参考API文档获取参数的详细信息:设置规则引擎配置
Java
1 public void setSiteConfigPageRules() throws Exception {
2 // 规则引擎需全量设置,否则会覆盖之前的规则
3 // 条件组1:组内多个条件是「且」关系
4 Rule pathRule = new Rule()
5 .withMatchFrom("path")
6 .withOperator("inValues")
7 .withValues(Arrays.asList("/test"))
8 .withIgnoreCase(true);
9 Rule directoryRule = new Rule()
10 .withMatchFrom("directory")
11 .withOperator("inValues")
12 .withValues(Arrays.asList("/test/"));
13 Rule argRule = new Rule()
14 .withMatchFrom("arg")
15 .withOperator("inValues")
16 .withMatchKey("test")
17 .withValues(Arrays.asList("abc"));
18 Rule suffixRule = new Rule()
19 .withMatchFrom("suffix")
20 .withOperator("inValues")
21 .withValues(Arrays.asList("jpg"));
22 Rule headerRule = new Rule()
23 .withMatchFrom("header")
24 .withOperator("inValues")
25 .withMatchKey("user-agent")
26 .withValues(Arrays.asList("test"));
27 Rule fullUrlRule = new Rule()
28 .withMatchFrom("fullUrl")
29 .withOperator("inValues")
30 .withValues(Arrays.asList("/test/test.txt"));
31 Rule basenameRule = new Rule()
32 .withMatchFrom("basename")
33 .withOperator("inValues")
34 .withValues(Arrays.asList("test.mp4"));
35 // remoteGeos 的 values 是对象列表:中国内地用 pro,其他国家用 cty
36 Map<String, String> proGeo = new LinkedHashMap<String, String>();
37 proGeo.put("pro", "beijing");
38 Map<String, String> ctyGeo = new LinkedHashMap<String, String>();
39 ctyGeo.put("cty", "bt");
40 Rule remoteGeosRule = new Rule()
41 .withMatchFrom("remoteGeos")
42 .withOperator("inValues")
43 .withValues(Arrays.asList(proGeo, ctyGeo));
44 Rule remoteAddrsRule = new Rule()
45 .withMatchFrom("remoteAddrs")
46 .withOperator("inValues")
47 .withValues(Arrays.asList("1.2.3.4", "172.16.0.0/12"));
48 // remoteIsp 的 values 是单个字符串
49 Rule remoteIspRule = new Rule()
50 .withMatchFrom("remoteIsp")
51 .withOperator("inValues")
52 .withValues("cm|un|ct");
53 Rule methodRule = new Rule()
54 .withMatchFrom("method")
55 .withOperator("inValues")
56 .withValues(Arrays.asList("GET", "POST"));
57 Rule cookieRule = new Rule()
58 .withMatchFrom("cookie")
59 .withOperator("inValues")
60 .withMatchKey("test")
61 .withValues(Arrays.asList("abc"));
62 Rule hostRule = new Rule()
63 .withMatchFrom("host")
64 .withOperator("inValues")
65 .withValues(Arrays.asList("1.test.com"));
66
67 // 条件组2:与条件组1之间是「或」关系
68 Rule regexRule = new Rule()
69 .withMatchFrom("path")
70 .withOperator("regex")
71 .withValues("^/example/test[123]/$");
72 Rule argExistsRule = new Rule()
73 .withMatchFrom("arg")
74 .withOperator("exists")
75 .withMatchKey("test");
76
77 PageRule pageRule = new PageRule()
78 .withName("示例")
79 .withStatus("ON")
80 .withRules(Arrays.asList(
81 Arrays.asList(pathRule, directoryRule, argRule, suffixRule, headerRule,
82 fullUrlRule, basenameRule, remoteGeosRule, remoteAddrsRule,
83 remoteIspRule, methodRule, cookieRule, hostRule),
84 Arrays.asList(regexRule, argExistsRule)))
85 .withConfig(buildFullRuleConfig());
86
87 SetSiteConfigRequest request = new SetSiteConfigRequest()
88 .withSite(SITE)
89 .withPageRules(Arrays.asList(pageRule));
90 SetSiteConfigResponse response = eoClient.setSiteConfig(request);
91 System.out.println(response);
92 }
93
94
95 private Config buildFullRuleConfig() {
96 // 节点缓存
97 CacheTtl cacheTtl = new CacheTtl()
98 .withValue("/")
99 .withWeight(100)
100 .withOverrideOrigin(false)
101 .withTtl(0)
102 .withType("path");
103 // 自定义 cache key
104 RuleCacheKey cacheKey = new RuleCacheKey()
105 .withQuery(false)
106 .withIgnoreCase(true)
107 .withIncludeArgs(Arrays.asList("a", "b"));
108 // 浏览器缓存
109 ClientCacheTtl clientCacheTtl = new ClientCacheTtl()
110 .withMode("custom")
111 .withTtl(150);
112 // 状态码缓存
113 CacheCodeTtl code404 = new CacheCodeTtl()
114 .withValue("404")
115 .withWeight(100)
116 .withOverrideOrigin(true)
117 .withTtl(10)
118 .withType("code");
119 CacheCodeTtl code400 = new CacheCodeTtl()
120 .withValue("400")
121 .withWeight(100)
122 .withOverrideOrigin(true)
123 .withTtl(10)
124 .withType("code");
125 // HTTP 头
126 Map<String, String> addHeaders = new LinkedHashMap<String, String>();
127 addHeaders.put("test", "${uri}");
128 addHeaders.put("test2", "11");
129 Map<String, String> removeHeaders = new LinkedHashMap<String, String>();
130 removeHeaders.put("Content-Type", "");
131
132 return new Config()
133 .withCacheTtl(Arrays.asList(cacheTtl))
134 .withCacheKey(cacheKey)
135 .withClientCacheTtl(clientCacheTtl)
136 .withOfflineMode("OFF")
137 .withCacheCodeTtl(Arrays.asList(code404, code400))
138 .withRefreshRevalidate(new RefreshRevalidate().withEnabled(true))
139 .withHttpToHttpsEnabled("ON")
140 .withHttpToHttpsCode("302")
141 .withHsts(new Hsts().withMaxAge(-1).withIncludeSubDomains(false).withPreload(false))
142 .withSslProtocols(Arrays.asList("TLSv1.0", "TLSv1.1", "TLSv1.2", "TLSv1.3"))
143 .withSslMode("custom")
144 .withSslCipherList("TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256")
145 .withOcsp("ON")
146 .withIsa("ON")
147 .withHttp2Disable("OFF")
148 .withHttp3(new Http3().withEnable(false))
149 .withWebSocket(new WebSocket().withEnabled(true).withTimeout(10))
150 .withHttp2Origin("ON")
151 .withClientMaxBodySize("1026")
152 .withCompress("ON")
153 .withCompressMethodArray(Arrays.asList("gzip", "br"))
154 .withClientResponse(new ClientResponse()
155 .withAddHeaders(addHeaders)
156 .withRemoveHeaders(removeHeaders))
157 .withOriginRequest(new OriginRequest()
158 .withAddHeaders(addHeaders)
159 .withRemoveHeaders(removeHeaders))
160 // originConfig 与 originPool 不能同时设置,这里用 originConfig
161 .withOriginConfig(Arrays.asList(new OriginConfig()
162 .withAddr("1.1.1.1")
163 .withType("IP")
164 .withHttpPort(80)
165 .withUpstreamProtocol("http")
166 .withHost("test.eo.com")))
167 .withOriginTimeout(new OriginTimeout().withLoadTimeout(10).withConnectTimeout(5))
168 .withOriginRedirectOptions(new OriginRedirectOptions()
169 .withEnableRedirectFollow("ON")
170 .withMaxRedirectFollowCount(2))
171 .withOriginOptions(new OriginOptions().withRange("force_all").withPartSize("512k"))
172 .withRealIp(new RealIp().withEnabled(true).withName("True-Client-Ip"))
173 .withErrorPage(Arrays.asList(
174 new ErrorPage().withCode(400).withUrl("http://test.eo.com/400.html"),
175 new ErrorPage().withCode(403).withUrl("http://test.eo.com/403.html")))
176 .withTrafficLimit(new TrafficLimit()
177 .withEnable(true)
178 .withLimitRate(1)
179 .withLimitStartHour(10)
180 .withLimitEndHour(19)
181 .withLimitRateUnit("k"))
182 .withAntiHotLink(new AntiHotLink()
183 .withAntiType("typeA")
184 .withSecretKey("xxx")
185 .withNewsecretKey("xxx")
186 .withTimeout(1800)
187 .withTimestampFormat("dec")
188 .withAuthArg("auth_key"))
189 .withOriginArg(new OriginArg()
190 .withIgnore(true)
191 .withArgs(Collections.<String>emptyList()))
192 .withUrlRules(Arrays.asList(new UrlRules()
193 .withScheme("http")
194 .withHost("test.eo.com")
195 .withStatus(302)
196 .withQuery("OFF")
197 .withDstPath("/test/1.txt")));
198 }
查询规则引擎配置
您可以参考API文档获取参数的详细信息:查询规则引擎配置
Java
1public void getSiteConfigPageRules() throws Exception {
2 GetSiteConfigRequest request = new GetSiteConfigRequest()
3 .withSite(SITE);
4 Map<String, Object> pageRules = eoClient.getSiteConfig(request, "pageRules");
5 System.out.println(JsonUtils.toJsonPrettyString(pageRules));
6}
评价此篇文章
