0

我有一個使用AWS Elastic Beanstalk部署的Flask應用程序。我使用S3作爲存儲,使用CloudFront作爲cdn。如何將Cache-Control標頭添加到由Elastic Beanstalk應用程序提供的靜態文件中?AWS Elastic Beanstalk/S3/CloudFront緩存控制標頭

+0

如果您使用的是cloudfront,那麼「從瓶子提供靜態文件」是什麼意思?難道你不想要cdn提供的所有靜態文件嗎? – dkarchmer

+0

當我部署Elastic Beanstalk應用程序時,它會將應用程序的壓縮文件上傳到S3。我使用這個作爲我的CDN的來源之一(另一個來源是應用程序圖像的桶)。我認爲靜態文件夾中的靜態文件正在通過CDN,但是第二個想法是,它不是。有沒有辦法將靜態文件上傳到eb部署中的S3上,還是需要編寫一個腳本來執行此操作? – mikeecb

回答

1

對於靜態文件,Elastic Beanstack假定一個非常簡單的設置。基本上假設你會從服務器本身提供服務。

大多數人和你一樣,使用S3和CloudFront,但不幸的是,這需要你手動部署這些靜態文件(即沒有0​​)。

如果您的靜態文件變化不大,您可以將它們手動上傳到您的s3原點。但可能更好的腳本。

我個人使用Gulp來管理我所有的靜態文件。咕嘟咕嘟有兩個方便包部署到S3,並設置緩存控制:

這不是很難做同樣的寶途,但咕嘟咕嘟也處理我的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 

希望這會有所幫助。

+0

我有這個工作,但由於rev-all(使緩存友好名稱模塊),我不知道什麼靜態文件將被調用。我想我將不得不更新我的python代碼/模板來通過它們緩存的惡意名稱來請求靜態文件,而不知道如何找到從實際名稱到緩存友好的名稱的映射。你能爲我指出正確的方向嗎? – mikeecb

+0

我注意到這個映射是用rev-all和'.pipe(revAll.manifestFile())'產生的。 – mikeecb

+0

我不知道你使用Flask的模板,或者如果你不使用模板。使用Django,我所做的就是將我的基本模板作爲index.html保存在我的gulp項目中。但是對於那個HTML文件,我沒有部署到S3,而是複製到我的Django項目中。該基本模板基本上沒有什麼,只是對剛剛創建的靜態文件的引用。 – dkarchmer