AWS Elastic Beanstalk / S3 / CloudFront Cache-Control 标头

Posted

技术标签:

【中文标题】AWS Elastic Beanstalk / S3 / CloudFront Cache-Control 标头【英文标题】:AWS Elastic Beanstalk / S3 / CloudFront Cache-Control Header 【发布时间】:2016-06-25 16:10:19 【问题描述】:

我有一个使用 AWS Elastic Beanstalk 部署的 Flask 应用程序。我使用 S3 进行存储,使用 CloudFront 作为 CDN。如何将 Cache-Control 标头添加到 Elastic Beanstalk 应用程序提供的静态文件中?

【问题讨论】:

如果您使用的是云端,那么“从烧瓶中提供静态文件”是什么意思?你不想所有的静态文件都由 cdn 提供吗? 当我部署我的 Elastic Beanstalk 应用程序时,它会将应用程序的压缩文件上传到 S3。我将其用作我的 CDN 的来源之一(另一个来源是应用程序的图像存储桶)。我假设静态文件夹中的静态文件正在通过 CDN,但转念一想,事实并非如此。有没有办法在 eb deploy 上将静态文件上传到 S3,还是我需要编写一个脚本来做到这一点? 【参考方案1】:

Elastic Beanstack 在静态文件方面采用了非常简单的设置。基本上假设您将从服务器本身为它们提供服务。

像您一样,大多数人使用 S3 和 CloudFront,但不幸的是,这需要您手动部署这些静态文件(即不使用 eb)。

如果您的静态文件没有太大变化,您可以手动将它们上传到您的 s3 源。但编写脚本可能会更好。

我个人使用 Gulp 来管理我的所有静态文件。 Gulp 有两个方便的包可以部署到 S3,并设置缓存控件:

https://www.npmjs.com/package/gulp-awspublish https://www.npmjs.com/package/gulp-cloudfront

对 Boto 做同样的事情并不难,但 Gulp 也会处理我的 CSS/JS 文件,包括创建一个缓存友好的部署名称(例如 app-1234.css)。我对 Elastic Beanstalk 的部署是:

gulp deploy  # Where Gulp processes CSS/JS/Images and uploads to S3/CF
eb deploy    # To deploy my python code

希望这会有所帮助。

【讨论】:

我已经完成了这项工作,但由于 rev-all (使缓存友好名称的模块),我不知道静态文件将被调用。我假设我将不得不更新我的 python 代码/模板以通过缓存名称来请求静态文件,但不确定如何找到从实际名称到缓存友好生成的名称的映射。你能指出我正确的方向吗? 我注意到这个映射也是使用 rev-all 生成的 .pipe(revAll.manifestFile()) 我不知道您在 Flask 中使用什么模板,或者您是否不使用模板。使用 Django,我所做的是将我的基本模板作为 index.html 保存在我的 gulp 项目中。但是对于那个 HTML 文件,我没有部署到 S3,而是复制到我的 Django 项目中。该基本模板基本上只有对刚刚创建的静态文件的引用。

以上是关于AWS Elastic Beanstalk / S3 / CloudFront Cache-Control 标头的主要内容,如果未能解决你的问题,请参考以下文章

将 create-react-app 部署到 AWS Elastic Beanstalk

Amazon Elastic BeanStalk 错误:无法创建 AWS Elastic Beanstalk 应用程序版本

[AWS] Elastic Beanstalk

AWS Elastic Beanstalk CLI 安装错误

text AWS Elastic Beanstalk

HTTPS Elastic Beanstalk (AWS) 到 Android