-
最佳实践汇总 本文汇总了内容分发网络(CDN)服务的常见应用场景,并为每个场景提供详细的方案描述和操作指南,以帮助您使用
CDN加速 网站。 表1 CDN最佳实践 分类 相关文档 网站接入CDN加速 CDN加速访问OBS桶文件 CDN加速访问基于E
CS 搭建的网站 CDN加速访问WAF防护资源 CDN加速云速建站CloudSite 提高缓存命中率 如何设置缓存过期时间 如何提高缓存命中率
日志分析 和转存 使用
函数工作流 服务实现CDN日志转存到OBS 通过日志分析恶意访问地址 定时刷新缓存 使用函数工作流服务实现定时刷新缓存功能 安全相关 防范恶意流量盗刷 其他 客户端访问加速
域名 经过Nginx转发时,如何定期刷新DNS解析
-
解决方案 如果想要定期刷新域名DNS解析,不用重启Nginx服务器,可以通过在Nginx上配置Resolver实现。 示例一: Nginx服务器原“nginx.conf”配置: location /prod-url-test/ {
...
proxy_pass http://$proxy_url;
} 添加resolver后的配置:*.*.*.*为设备网络使用的公共DNS或本地DNS,可根据业务情况配置两个DNS,valid为解析结果有效期。 location /prod-url-test/ {
resolver *.*.*.* *.*.*.* valid=300s;
resolver_timeout 10s;
set $proxy_url "prod-url-test.example.com";
proxy_pass http://$proxy_url;
} 示例二: Nginx服务器原“nginx.conf”配置: location = /test/example1.txt{
expires 30s;
rewrite ^/test/example2.txt break;
proxy_pass https://test.example.com;
} 添加resolver配置:*.*.*.*为设备网络使用的公共DNS或本地DNS,可根据业务情况配置两个DNS,valid为解析结果有效期。 set $var_host "test.example.com";
resolver *.*.*.* *.*.*.* valid=300s;
resolver_timeout 10s;
location = /test/example1.txt{
expires 30s;
rewrite ^/test/example2.txtbreak;
proxy_pass https://$var_host;
proxy_set_header Host test.example.com;
}
-
适用场景 如果您的加速域名遭受攻击,想要加固安全防护配置,比如配置防盗链、IP黑白名单等,您可以通过分析攻击时段对应的日志实现。 CDN日志包含了终端用户访问的信息,日志内容示例如下: [05/Feb/2018:07:54:52 +0800] x.x.x.x 1 "-" "HTTP/1.1" "GET" "www.test.com" "/test/1234.apk" 206 720 HIT "Mozilla/5.0 (Linux; U; Android 6.0; zh-cn; EVA-AL10 Build/HUAWEIEVA-AL10) AppleWebKit/533.1 (KHTML,like Gecko) Mobile Safari/533.1" "bytes=-256" x.x.x.x 各字段从左到右含义如表1所示。 表1 CDN日志字段说明 序号 字段含义 字段示例 1 日志生成时间 [05/Feb/2018:07:54:52 +0800] 2 访问IP地址 x.x.x.x 3 响应时间(单位ms) 1 4 Referer信息 - 5 HTTP协议标识 HTTP/1.1 6 HTTP请求方式 GET 7 CDN加速域名 www.test.com 8 请求路径 /test/1234.apk 9 HTTP状态码 206 10 返回字节数大小 720 11 缓存命中状态 HIT 12 User-Agent信息,其作用是让服务器能够识别客户使用的操作系统及版本、CPU类型、浏览器及版本信息等。 Mozilla/5.0 (Linux; U; Android 6.0; zh-cn; EVA-AL10 Build/HUAWEIEVA-AL10) AppleWebKit/533.1 (KHTML,like Gecko) Mobile Safari/533.1 13 Range信息,其作用是在HTTP请求头中指定返回数据的范围,即第一个字节的位置和最后一个字节的位置。 bytes参数值表示方法一般分为如下三类: bytes=x-y:表示请求第x个字节到第y个字节的数据内容。 bytes=-y:表示请求最后y个字节的数据内容。 bytes=x-:表示请求第x字节到最后一个字节的数据内容。 bytes=-256 14 服务端IP:CDN服务端响应IP。 x.x.x.x
-
代码示例 使用代码示例时请根据需要调整刷新类型(type)及需要刷新的URL(urls)。 # -*- coding:utf-8 -*-
import json
import requests
def handler (event, context):
header = {"x-auth-token":context.getToken(),'content-type':'application/json;charset=utf-8'}
data = {
"refresh_task":{
"type":"file",
"urls":["https://example.com/1.txt"]
}
}
url = 'https://cdn.myhuaweicloud.com/v1.0/cdn/content/refresh-tasks'
result = requests.post(url=url,headers=header,data=json.dumps(data))
context.getLogger().info(result.text)
return {
'statusCode': 200,
'body': result.text,
'isBase64Encoded': False,
'headers': {
'Content-Type': 'application/json'
}
}
-
方案概述 云速建站服务(Cloud Site Service)是华为云提供的一款模板建站服务。具有操作简单,任意布局,一次编辑,多设备适应等特点。提供PC、 手机、 微信公众号、小程序、 APP五站合一的模板建站产品,无需代码,自由拖拽,快速生成中小企业网站及网店、微信网店等。 您可以通过CDN加速您的站点,提高用户访问网站的响应速度与网站的可用性,解决网络带宽小和客户访问量大等问题。本文介绍如何在CDN控制台添加域名,加速站点。 目前企业版(多终端独立企业版)站点已支持通过CloudSite控制台配置CDN加速,详情请见配置站点加速。
-
解决问题 通过对攻击行为的分析,可提取相应的攻击IP/Referer/UA,CDN提供的基础访问控制功能可以实现相应的防护。 配置防盗链拒绝带有恶意Referer请求:攻击者会伪造请求头中的Referer字段,试图假冒合法引用来源。可以配置Referer黑白名单,允许合法的Referer请求,拒绝未经授权的第三方网站链接到资源。 配置IP黑名单限制可以IP访问:筛选出可以IP地址,将这些IP地址列入黑名单。 配置UA黑名单过滤可疑User-Agent:攻击者会伪造User-Agent字段发送大量请求,试图绕过安全检查,可能包含空值或随机字段。可以通过配置相关UA黑白名单,限制空UA访问。 开通边缘安全防护:开通边缘安全服务,边缘安全(Edge Security,EdgeSec)是华为云基于CDN边缘节点提供的安全防护服务,包括:边缘DDoS防护、CC防护、WAF防护、BOT行为分析等功能,可根据业务情况配置相关安全规则,实现加速域名的全方位防护。
-
分析攻击行为 域名被攻击后,可以通过以下步骤分析攻击时间和攻击者的信息,以便加固安全防护配置。 确定攻击时间范围:通过查看账单分析攻击的具体时间,根据需要选择统计周期和维度,分析高额账单发生时段,账单导出方式详见费用账单。 分析离线日志:通过查看对应时段的离线访问日志,分析HTTP请求信息,识别异常IP地址、防盗链等信息,以便针对性设置防护规则。详细信息请参考通过日志分析恶意访问地址。 分析实时日志:如果在发生攻击行为之前,域名已经接入实时日志,可以通过实时日志分析更多客户端信息,如X-Forwarded-For字段、请求时间等。 可通过LTS为CDN定制的仪表盘分析日志信息,详见CDN仪表盘模板。 也可以登录LTS服务控制台,选择华北-北京四region,在“日志管理”页面单击对应的日志组或日志流名称,分析该日志组中相关日志详情。 如需使用实时日志功能,可参考实时日志将域名的实时日志上报至LTS。 开通实时日志后,CDN节点实时日志推送暂不收费(后续是否会收费请关注产品动态),基础存储与分析相关费用由
云日志 服务(LTS)收。 查看运营报表:CDN支持定制热门URL、热门Referer和热门UA报表,如果在发生攻击前被攻击的域名已经定制了运营报表,可以下载攻击时段的报表分析相关信息,详见运营报表。 实时日志和运营报表均需要提前配置,如果因攻击产生高额账单时未配置这两项功能,只能通过离线日志分析历史数据。
-
发生盗刷后及时止损 如果您的域名已经被恶意攻击或盗刷流量,您可以配置用量封顶和请求限速,防止损失进一步扩大,然后分析攻击行为,配置相关防护策略。 配置用量封顶:配置域名最大使用带宽/流量,当用量达到配置的阈值时,CDN将停用域名,有效预防流量盗刷或恶意攻击带来的高额账单。详细配置请参考用量封顶。 图1 添加用量封顶 配置请求限速:配置用户请求限速,对用户访问到CDN节点的请求进行下行速率限速,控制总请求带宽,一定程度上减少突发高带宽风险。详细配置请参考请求限速。 图2 请求限速配置
-
后续防护 配置
CES 监控:开启CES监控上报功能,将重要指标上报并设置告警,监控指标数据超过告警阈值时,会发出告警,方便您实时了解业务情况,及时规避风险。详细配置流程请参考CES监控上报。 CES监控功能CDN侧不收费,如果您在CES侧设置了告警,发送告警通知时
消息通知 服务(
SMN )会收取相应的费用,SMN服务的价格详见这里。 配置可用额度预警:配置可用额度预警功能,当账户可用额度低于一定金额时,系统会发送短信提醒。 为了确保统计数据的完整性和账单的准确性,CDN产品账单生成时间会存在延时,详见基础服务计费方式。因此实际计费时间晚于对应的CDN资源消耗时间,无法通过账单来实时反馈资源消费情况,这是由于CDN产品自身的分布式节点特性导致,也是业界通用的处理方法。 配置IP访问限频:配置IP访问限频功能,通过限制单IP的单URL每秒访问单个节点的次数(QPS),实现CC攻击防御及恶意盗刷防护,降低高额账单风险。 配置突发带宽告警:配置突发带宽告警,当客户端请求带宽达到配置的阈值时发出告警信息,方便及时发现异常攻击,有效预防流量盗刷或恶意攻击带来的高额账单。
-
执行操作 当客户端请求匹配了触发条件中的规则时,将执行相关配置。当前规则引擎支持的配置详见表2。 表2 规则引擎支持的配置项 功能分类 功能名称 说明 基础配置 HTTP header响应头 与“高级配置”中的“HTTP header配置(跨域请求)”配置要求一致,生效范围不同: HTTP header响应头:仅对规则匹配的资源生效。 HTTP header配置(跨域请求):对域名下所有资源生效。 高级回源 匹配了条件规则中触发条件的客户端请求,需要遵循该条件规则中的高级回源配置。 回源请求头 匹配了条件规则中触发条件的客户端请求,需要遵循该规则中回源请求头配置。 提升访问安全 访问控制 匹配了条件规则中触发条件的客户端请求,需要遵循该条件规则中的访问控制配置。当前可配置允许和拒绝。 允许:匹配条件的请求可正常访问资源。 拒绝:匹配条件的请求将被拦截,返回403状态码。 请求限速 匹配了条件规则中触发条件的客户端请求,需要遵循该规则中请求限速配置。 提升命中率 回源URL改写 匹配了条件规则中触发条件的客户端请求,需要遵循该条件规则中的回源URL改写配置。 改写方式:定义如何获取改写内容,支持配置精确改写和捕获改写。非规则引擎中的回源URL改写功能,匹配方式所有文件、URL路径对应精确改写,通配符对应捕获改写。 缓存规则 匹配了条件规则中触发条件的客户端请求,需要遵循该条件规则中的缓存规则配置。 访问URL重写 匹配了条件规则中触发条件的客户端请求,需要遵循该条件规则中的访问URL重写配置。 缓存配置 状态码缓存过期时间 匹配了条件规则中触发条件的客户端请求,需要遵循该条件规则中的状态码缓存过期时间配置。 浏览器缓存过期时间 匹配了条件规则中触发条件的客户端请求,需要遵循该条件规则中的浏览器缓存过期时间配置。
-
注意事项 如需使用规则引擎功能,请提交工单申请开通。 单域名最多可配置10条规则。 “业务类型”为“全站加速”的域名,暂不支持配置规则引擎。 后台有特殊配置的域名暂不支持配置规则引擎。 规则引擎功能和普通功能同时配置时,规则引擎优先级更高。 新增规则默认位于顶部,存在多条规则时顶部优先级大于底部,即如果同时匹配多条规则,高优先级的规则生效。 一个触发条件最多支持三级嵌套,最后一个层级的逻辑运算符只能是“并且”或“或者”,不能组合使用。
-
IP地址校验模式 规则引擎功能的“IP地址校验模式”分为两种,使用不同的“IP地址校验模式”会影响到CDN节点对客户端IP的判断: 建联 IP:该模式匹配的是客户端与CDN节点之间建连使用的IP,如果客户端与CDN节点之间有经过代理服务器,那么建联IP=代理服务器IP。 x-forwarded-for头:该模式匹配的是用户请求中x-forwarded-for请求头携带的左边第一个IP,不论客户端与CDN节点之间是否有经过代理服务器,x-forwarded-for头IP都=客户端真实IP。 示例:假设客户端真实IP为10.10.10.10,代理服务器IP为192.168.0.1。 没有经过代理服务器: 用户请求中x-forwarded-for请求头值:10.10.10.10。 客户端真实IP(即x-forwarded-for请求头携带的左边第一个IP)=客户端与CDN节点建连IP=10.10.10.10。 经过代理服务器: 用户请求中x-forwarded-for请求头值:10.10.10.10,192.168.0.1。 客户端真实IP(即x-forwarded-for请求头携带的左边第一个IP)=10.10.10.10。 客户端与CDN节点建连IP=代理服务器IP=192.168.0.1。 客户端真实IP(即x-forwarded-for请求头携带的左边第一个IP)≠客户端与CDN节点建连IP。
-
配置示例 配置场景1:某客户的域名“www.example.com”配置了CDN加速,缓存规则配置见下图。 配置结果:网站首页不缓存,所有页面均不会忽略URL参数。 配置场景2:设置某个类型的文件不缓存 某客户的域名“www.example.com”配置了CDN加速,由于业务需求,需要对“.do”格式的文件不缓存,同时所有文件都忽略URL参数。 需要在CDN控制台增加一条文件名后缀为“.do”的缓存规则,缓存过期时间设置为“0”。 新规则仅对后续资源缓存生效,新规则配置完成后,建议您刷新“.do”文件所在的URL或者目录,新规则才可以对所有“.do”文件生效。 某客户配置了CDN加速,发现登录界面无限循环,无法登录,停用CDN加速后,可以正常登录。 这是因为CDN节点缓存了登录界面导致的,需要在控制台增加一条针对登录界面的缓存规则,缓存过期时间设置为“0”。以华为云控制台登录界面为例,华为云控制台的登录页面为“https://auth.huaweicloud.com/authui/login.html#/login”,在控制台增加一条全路径:/authui/login.html#/login,缓存过期时间为“0”的缓存规则。 配置场景3:某客户加速域名www.example.com设置了如下图的缓存规则,不知道哪一个规则生效。 用户访问www.example.com/test/cdn.jpg,虽然所有文件、文件名后缀、全路径三条规则都匹配到了,但是由于全路径的优先级为8,在三条规则里优先级最高,所以系统最终匹配全路径/test/*.jpg这条规则。
-
注意事项 每个域名最多可添加60条缓存规则。 CDN缓存过期时间会对“回源率”产生直接的影响。如果CDN缓存过期时间过短,CDN节点上的数据会经常失效,导致频繁回源,增加了源站的负载,同时也增大了访问延时;如果CDN缓存过期时间过长,会带来数据更新时间慢的问题。 缓存过期时间设置为0时,该文件的所有请求都将回源,可能存在加速业务中断的风险。 节点缓存的资源,可能会由于热度较低而被提前从CDN节点删除。 如果您修改了缓存规则,请注意: 新的规则仅对后面缓存的资源生效,已经缓存的资源需要等缓存过期后,再次缓存才会遵循新的缓存规则。 如果您想要新的规则对所有资源(包括节点已缓存资源)立即生效,请在修改缓存规则后执行缓存刷新操作。
-
背景信息 CDN节点的缓存策略遵循HTTP标准协议,通过HTTP响应头中的Cache-control: max-age的字段来设置CDN节点上数据的缓存时间。添加缓存规则让CDN用户可以对指定的业务做定制化的数据缓存时间管理。合理的配置缓存时间,能够有效提升命中率,降低回源率,节省用户的带宽。 当用户向CDN节点请求数据时,CDN节点会判断缓存数据是否过期。如果缓存数据未过期,则直接将缓存数据返回给用户,提升获取速度;否则,CDN节点就会向源站发出回源请求,从源站请求最新数据,更新本地缓存,并将最新数据返回给用户。