如何使用边缘规则?

配置指南

在这个章节,我们会介绍如何添加和编辑边缘规则集,主要大纲包括:

  • 认识规则管理界面
  • 规则优先级
  • URI 字符串提取
  • 变量使用
  • 执行动作
  • 规则测试

认识规则管理界面

登陆 [CDN 控制台][1],依次进入:服务管理 > 功能配置 > 边缘规则 > EdgeRules,即可进入边缘规则管理界面。如下图所示:

在规则管理界面,针对每一条规则,控制台提供了如下字段信息:

字段 描述
优先级 指定规则执行的先后顺序
规则名称 该条规则的名称,方便管理标识
break 规则命中之后,是否跳出所有的规则集
状态 包括启用、关闭、测试三种状态
编辑 编辑规则
删除 删除规则
更多 包括启用、关闭、测试三个选项

规则优先级

理论上,所有规则的优先级是按照先后顺序来执行的,优先级越靠前则会被优先执行,这个仅适用于添加 HTTP 头部、删除 HTTP 头部、访问控制、请求限速、自定义错误页面、边缘重定向。针对 URL 改写动作,即使 URL 改写的规则放在前面, 还是会等执行完其他动作之后,才会去执行 URL 改写动作。

这里根据具体示例进行说明,如截图所示:

特别地:当匹配的条件都相同时,例如:当请求 URI 都为 /123.mp4 时,按照优先级顺序出现了如下 5 条规则:

第 1 条规则:当请求的 URI 为 /123.mp4 时,改写到 /beibei.mp4

第 2 条规则:当请求的 URI 为 /123.mp4 时,添加 HTTP 响应头 CDN

第 3 条规则:当请求的 URI 为 /123.mp4 时,边缘重定向到 https://www.upyun.com/

第 4 条规则:当请求的 URI 为 /123.mp4 时,进行访问控制,响应 403 状态码

第 5 条规则:当请求的 URI 为 /123.mp4 时,进行请求限速,限速到 200KB/s

按照当前的设计逻辑,第 1 条规则不会被立马执行,会等待后面所有的规则执行完毕之后,才会进行 URL 改写的动作。按照规则优先级,会依次执行第 2 条规则,然后再执行第 3 条规则,通过 curl 发起命令测试,测试结果为:

 GET /123.mp4 HTTP/1.1
 Host: wuxuejun2018.b0.upaiyun.com
 User-Agent: curl/7.43.0
 Accept: */*

 HTTP/1.1 302 Moved Temporarily
 Server: marco/1.10
 Date: Wed, 20 Dec 2017 09:28:28 GMT
 Content-Type: text/html
 Content-Length: 159
 Connection: keep-alive
 Location: https://www.upyun.com
 Via: M.ctn-zj-lna3-019
 X-Request-Id: 32c1c154c192027be98887ad63c3b08c
 CDN: UPYUN

按照测试结果,依次命中了第 2 条和 第 3 条规则。

可以看出,第 1 条、第 4 条、第 5 条都没有被执行,那是因为第 1 条属于 URL 改写,不会立马执行;第 3 条为边缘重定向,直接 302 到 https://www.upyun.com 了,跳出了整个规则集,从而接下来的规则不会被执行,包括 URL 改写。

特别注意的是,类似边缘重定向这类直接跳出所有规则集的行为,还包括:

  • 自定义错误页面
  • 访问控制

也就是说,当执行完边缘重定向、自定义错误页面、访问控制等动作之后,会直接跳出整个规则集,不会执行接下来的匹配动作。

URI 字符串提取

所谓 URI 字符串提取,也即在执行边缘重定向以及 URL 改写动作时,根据业务需求,可能会提取原始请求 URI 中的字符串。其中 URI 字符串提取支持 PCRE 正则表达式,匹配后,产生 $1, $2 … 这样的变量。

URI 字符串提取正则表达式:

^/pay/([0-9]+)/([0-9]+)/(.*?).html$

根据以上的 PCRE 正则表达式,分别会产生 3 个 字符串,为 $1$2$3。分别对应了以上正则表达式里面的从左到右 () 里面的字符串。

URL 改写规则:

/pay.php?payid=$1&categoryid=$2

配置截图可参考:

1)通用模式

2)编程模式

通过执行以上规则之后,原始请求和改写后的地址分别如下:

原始请求:

http://example.com/pay/25/8/...

改写后地址:

http://example.com/pay.php?payid=25&categoryid=8...

变量使用

在进行 URL 改写和边缘重定向动作时,除了可以提取 URI 中的 字符串,您还可以获取原始请求中的变量。这些变量包括:

变量 含义
$_IP 客户端 IP
$_HOST 请求头中的 Host 字段
$_HOST_n $_HOST_n 指 Host 中的第 n 个子域,例如对于 foo.bar.baz.com:$_HOST_1 = foo,$_HOST_2 = bar,$_HOST_3 = baz
$_GET_name 使用 Query String 中的变量(无需 urldecode)
$_POST_name 使用 POST 表单中的变量(只支持 www form )
$_HEADER_name 使用 Header 中的值,注意 name 全为小写
$_COOKIE_name 使用 Cookie 中的字段值
$_RANDOM 随机字符串,字符集为 [a-zA-Z0-9],默认 8 位
$_RANDOM_n n 位随机字符串,其中 1 <= n <= 32
$_URI 请求的 URI,不包含参数
$_QUERY Query String,不带前缀 ‘?’
$_METHOD GET/POST/PUT/POST/DELETE/OPTIONS/PATCH
$_SCHEME http/https,注意此处全为小写
$_TIME 获取当前服务器时间,格式为 UNIX TIME
$_BODY 获取当前请求的 BODY(请求体)内容,大小限制为 16KB
$_GEOIP_COUNTRY_CODE 国家代码,可参照维基百科: https://en.wikipedia.org/wiki/ISO_3166-2

为了更加方便理解,下面将通过一个应用示例来展开介绍:

示例:URL 改写

例如:某个 URL 为 https://www.example.com/index.htm

需求:希望通过 URL 改写动作,将客户端 IP (这里以 192.168.1.1 为例) 以及请求方法(实际的请求方法为 GET)通过查询字符串传递到源站后端;

改写规则可以为:

/index.php?ip=$_IP&method=$_METHOD

则改写后的完整 URL 为:

https://example.com/index.php?ip=192.168.1.1&method=GET

配置截图可参考(通用模式):

执行动作

添加 HTTP 头部

通过使用边缘规则的【添加 HTTP 响应头部】功能,当您的用户请求业务资源时,可以在返回的【响应消息】中添加您配置的头部,这些头部可能包括:

  • Cache-Control
  • Content-Disposition
  • Content-Language
  • Access-Control-Allow-Origin
  • Content-Type

当然,您也可以根据业务要求,自定义响应字段。例如:CDN:UPYUN

具体使用截图如下截图所示:

1)通用模式

2)编程模式

从截图可以看出,添加 HTTP 头部,您需要分别填写:

  • Header 域名:Access-Control-Allow-Origin
  • Header 域值:*

另外,有【覆盖原有响应头】的配置,默认为否,可以根据具体情况来勾选。当勾选时,会覆盖掉原始的响应头信息。

删除 HTTP 头部

通过使用边缘规则的【删除 HTTP 响应头】功能,您可以删除掉不必要的响应字段。如隐藏掉一些并不安全的响应头部信息。例如:

  • X-Powered-By

具体配置参见如下截图所示:

注意事项:又拍云 CDN 内部不能删除的响应头包括:

Via
Age
Server
connection
X-cache
x-source
X-request-id
Content-range
Content-length
Transfer-encoding

边缘重定向

通过使用边缘规则的【边缘重定向】功能,当匹配到条件时,CDN 会响应一个 301/302 请求给客户端,重定向状态码支持 301 和 302。

具体的配置可参照如截图所示:

当条件满足:请求 HOST 为 XXX 并且客户端 User-Agent 正则匹配 XXX 时,则执行重定向动作,301 重定向到:

https://test.com/$1/123.html

自定义错误页面

通过使用边缘规则的【自动错误页面】功能。使用自定义源站错误页面,而非 CDN 默认指定的错误页面。当前支持的源站错误信息状态码包括:

  • 404
  • 500
  • 501
  • 502
  • 503
  • 504

这里以 404 错误页面为例,当源站响应 404 状态码时,则 302 重定向到指定 404 页面。具体的配置可参照如截图所示:

URL 改写

配合网站将动态 URL 转换为语义 URL,改善搜索引擎索引机制,提高网站 SEO 排名。将原始请求 http://www.example.com/pay/25/8/... 进行 URL 改写。

相关配置如截图所示:

请求限速

通过使用边缘规则的【请求限速】功能,在不影响终端用户体验的情况下,将请求速度控制在合理范围之内,节省 CDN 带宽。

具体配置如截图所示:

规则释义:开始 20MB 不限速,后面限制到 800KB/s

访问控制

灵活针对请求内容进行访问控制,可以响应 403/404 状态码。这里针对 User-Agent 进行过滤,比如:来自搜狗等爬虫的请求直接响应 403 状态码。具体的配置如截图所示:

规则测试

由于边缘规则的 URL 改写、边缘重定向、访问控制等动作是有副作用的,为了安全起见, 每一条规则默认都在测试状态下。测试状态下,平台会自动获取客户端本地 IP 地址,也即规则仅针对该 IP 地址生效。您也可以更换其他 IP 地址进行测试。具体的配置截图如图所示:

这篇文章有帮助吗?

相关文章