配置指南
在这个章节,我们会介绍如何添加和编辑边缘规则集,主要大纲包括:
- 认识规则管理界面
- 规则优先级
- 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 地址进行测试。具体的配置截图如图所示: