使用AWS内容交付网络(CloudFront)服务前台的6个最佳实践
现代前台的速度和响应速度都快得惊人。此外,它需要专门的工具和平台来进行大规模的交付。AWS CloudFront就是这样一个平台,它是一个CDN(内容交付网络),高度可定制。
因此,在这篇文章中,我将带你了解优化CloudFront的6个最佳做法,以实现快速和安全的前端服务。
1.使用CDN缓存前端资产
AWS CloudFront CDN在你的前端主机和用户之间充当了中间人。通过CloudFront,你可以缓存HTML、CSS、JavaScript和图片。由于缓存离用户更近,内容的传递将以最小的延迟进行。
你还可以将CloudFront配置为原点故障转移,以便在需要高可用性的情况下进行回退处理。
而最好的优势是,AWS CloudFront原生支持集成Amazon S3,你可以在那里托管你的前端工件。此外,你可以在任何地方托管你的前端,仍然通过AWS CloudFront提供服务。
更多细节,请参考AWS的文章《使用CloudFront服务静态网站》。
2.在新的部署中使用缓存无效功能
在进行新的部署时,使缓存失效总是好的,以防止浏览器从缓存中检索旧的文件版本。
AWS CloudFront现在支持快速的缓存失效,允许你立即部署更新到你的SPA,同时仍然有CDN缓存的好处。
注意:作为一种实践,你可以只对部署中被修改的文件进行失效。例如,如果你使用默认配置的Webpack,你只需要废止index.html,因为每个修改的JS和CSS都有新的文件名。
你也可以使用AWS Amplify来简化你的部署,并通过内置优化来缓存无效。
AWS Amplify - 静态网络托管 - 亚马逊网络服务
3.使用私人S3桶和Origin访问身份来保证安全
如果你使用一个亚马逊S3桶作为CloudFront发布的起源,那么限制公众对S3的访问是非常重要的。
限制访问可以防止有人绕过CloudFront,通过Amazon S3 URL访问你想保持安全的内容。
你会想,既然要公开的是前端资产,为什么会有这样的问题?原因是,通过AWS CloudFront提供的服务有更多的控制权,你可以设置Web应用防火墙(WAF)规则和其他限制你的内容的安全。
使用你的CloudFront分布来限制对Amazon S3桶的访问
4.对于无哈希值的URL,使用Lambda@Edge
Lambda@Edge允许你拦截通过CloudFront的HTTP请求。这些功能在离用户更近的CloudFront Edge位置运行,使其能更快地对传输中的内容做出反应或采取行动。
Lamda@Edge的一些常见用例是:
- 根据请求或响应属性动态生成自定义内容,如根据请求属性调整图片大小。
- 为请求和响应添加逻辑,如创建漂亮的URL和管理原点请求的认证和授权。
- 提高缓存命中率,通过避免缓存缺失造成的延迟,从而提高应用性能。
- 处理自定义认证和授权。
如果你需要探索更多关于Lamda@Edge的信息,你可以翻阅AWS提供的文档。
注意:如果你需要简单的需求,比如只使用Hashless URLs,有一个简单的后续方法。由于目标是为index.html提供服务,即使用户直接进入路由,我们可以设置CloudFront的错误处理,在S3返回错误代码404的 "资源未找到 "的情况下为index.html提供服务。
5.使用压缩(Brotli,Gzip)
我鼓励你遵循的另一个最佳做法是使用压缩方法。通过AWS CloudFront,你可以使用Brotli或GZip为你的应用程序提供服务,并大幅降低内容下载速度。
更快的下载,特别是对JavaScript和CSS文件,可以使你的SPA更快地呈现出来。
此外,由于CloudFront的数据传输成本是基于服务的数据总量,服务压缩文件比服务未压缩文件的成本低。
Brotli是一种广泛使用的无损压缩算法,在压缩率方面经常优于Gzip。与Gzip相比,CloudFront的Brotli边缘压缩可使文件大小减少24%。
压缩功能可以通过CloudFront控制台、SDK和CLI启用。你需要将EnableAcceptEncodingGzip设置为 "true "以返回Gzip压缩对象,将EnableAcceptEncodingBrotli设置为 "true "以返回Brotli压缩对象。当查看器支持这两种格式时,CloudFront将使用Brotli。
Chrome和Firefox网络浏览器仅在使用HTTPS发送请求时支持Brotli压缩。在这些浏览器中,HTTP请求不支持Brotli。
6.使用有版本的文件名
当执行一个新的部署时,你可以使文件失效,或者给它们一个有版本的文件名来控制由你的发行版提供的文件的版本。如果你经常更新你的文件,最好是使用文件的版本。
版本化让你更好地控制CloudFront提供的内容。
- 版本管理使分析文件变化的影响更加容易,因为 CloudFront 访问日志包括文件名。
- 版本管理使不同版本的文件可以提供给不同的用户。
- 版本管理简化了文件修订之间的来回滚动。
- 版本管理的成本较低。你仍然必须向CloudFront付费,以便将你的文件的新版本传输到边缘位置,但你不必为无效文件付费。
slider_v1.js, image_v1.jpg是你可以使用的一些文件版本名称的例子。
结论
无论你设计和开发的应用程序有多好,如果它的性能不好,用户就会不太喜欢。使用AWS CloudFront,你可以解决大多数影响你的应用程序前端的性能和安全挑战。
因此,我邀请你尝试一下AWS CloudFront,并遵循这些做法来加速和保护你的前端的规模。
谢谢你的阅读!!