目录
1 业务背景
2 解决思路
3 CloudFront CDN 架构
业务背景
公司内部用户中心系统承接所有内部系统的用户登录,鉴权工作,每日用户在前端和接口调用量随着业务增长和内部系统增加,访问量稳步上升,对用户中心系统的访问接入速度,稳定性,可用性要求越来越高。且系统直接暴露在公网上,面临各种用户名,密码的暴力破解等安全性问题。
解决思路
对于现有问题的收集,主要从以下两方面进行优化:
速度:通过接入 CDN 提升系统整体访问速度,利用CDN边缘节点加速位于全球各地的用户以及系统接入速度。 安全:通过接入 WAF 提升系统整体安全性,利用AWS WAF插拔模块的特性,将AWS WAF以模块的形式插在CloudFront 上。
这样既解决目前位于全球各地用户的整体访问速度,又能利用WAF的功能实现基本的安全防护。
CloudFront CDN 架构
3.1 CDN优势
提高安全性 使用 CloudFront 实现外围保护、流量加密和访问控制。为了保护应用程序,将 AWS WAF的托管规则和托管的第三方防火墙规则选项集成到 CloudFront 节点中以实现其安全性。 减少延迟 通过aws 全球PoP节点通过完全冗余的边缘节点进行连接,可为终端用户提供超低延迟的性能和高可用性。在提供静态内容缓存或动态分发内容时,CloudFront 会自动映射网络状况并智能地路由用户的流量至最优的边缘CDN节点。
利用AWS 全球网络基础设施移动动态 Web 内容以加快分发速度
3.2 用户请求站点基本逻辑
接入 CDN 之前的请求访问链路图,每个用户在请求服务端时,都需要分别和服务端建立 TCP 连接。
接入 CDN 之后的请求访问链路图,当第一个用户请求过一次后,CDN节点已经和源站服务端建立了 TCP 连接,此时第二个用户在进行请求时,用户只需和 CDN 节点建立 TCP 连接,而 CDN 节点可以利用之前已经建立的 TCP 连接和源站服务端进行通信,相应的减少了之后访问该 CDN 节点的用户的整体请求时间。
当站点未接入 CDN 时,用户的访问路径是直接通过公网访问到源站服务器,因公网的不可确定因素比较多,难免会出现网络抖动导致请求缓慢或失败;当站点接入 CDN 后,用户通过 DNS 解析到距离自己最近的 CDN 节点,通过和 CDN 建立连接后,如果 CDN 节点已经有需要的缓存结果,则从 CDN 节点直接返回给用户;如果 CDN 节点没有缓存结果或结果已过期,则 CDN 节点会将请求回源到源站进行请求。
经过 CDN 的请求主要分为两类:
静态内容:主要指 html/js/css 等前端静态页面所需文件。 动态内容:主要指后端 API 接口响应的内容。
AWS Cloudfront 产品同时支持静态内容和动态内容的加速和缓存。
当用户请求到 CDN 节点时,如果缓存内容已经过期,此时请求会进行回源,如果源站响应错误,返回5xx报错,CDN 节点会捕获5xx报错,给用户返回之前缓存的内容,以对用户降低不可用性。
提高网络流量可见性
Amazon WAF 通过捕获每个被检查的 Web 请求的完整标头数据来提供全面的日志记录,以便用于安全自动化、分析或审计目的。
利用托管规则节省维护成本 可以快速选择已有托管规则开始并保护 Web 应用程序或 API 免受常见威胁的攻击,并且利用流量日志捕获被的日志进行自定义规则实现。 易于部署和维护 WAF 以可插拔模块的形式,可被轻松应用于Application LoadBlancer 或者CloudFront 当中。
CloudFront 回源指向源站系统接入CDN之前的NLB。
WAF 配置以托管规则加载,并以插拔模块的形式接入CloudFront。
EC2 中运行Nginx 对源站所有静态内容配置Expires 头,其他非静态内容配置Cache-Crontrol头,并由CDN节点返回给用户终端节点。
当用户请求目标系统时,CDN边缘节点会和用户终端建联,WAF会对请求进行安全扫描并决定是否放行。







实验方案描述:
使用 curl 命令并输出每个阶段耗费的时间,命令如下:
每次循环执行 100 次,取平均值。
字段说明:
time_namelookup:DNS 域名解析耗时
time_total:这次请求花费的全部时间
