例如,我的css代码有这个图像文件:
background: url('/static/studyspot5/images/shapes/footer_sass.png');
它不会在我的AWS网站上呈现,我在settings.py中有以下相关代码:
if USE_S3:
STATICFILES_LOCATION = 'static'
MEDIAFILES_LOCATION = 'media'
MEDIA_URL = f'https://{CLOUDFRONT_DOMAIN}/{MEDIAFILES_LOCATION}/'
MEDIA_ROOT = f'https://{AWS_S3_CUSTOM_DOMAIN}/static/{MEDIAFILES_LOCATION}/'
STATIC_URL = 'https://%s/%s/' % (CLOUDFRONT_DOMAIN,STATICFILES_LOCATION)
STATIC_ROOT = 'https://%s/%s/static/' % (AWS_S3_CUSTOM_DOMAIN,STATICFILES_LOCATION)
STORAGES = {
"default": {"BACKEND": 'custom_storages.MediaStorage'},
"staticfiles": {"BACKEND": 'custom_storages.StaticStorage'},
"OPTIONS": {
"bucket_name": AWS_STORAGE_BUCKET_NAME,
"region_name": AWS_S3_REGION_NAME,
# "verify": AWS_S3_VERIFY,
"signature_version": AWS_S3_SIGNATURE_VERSION,
"cloudfront_key_id": AWS_CLOUDFRONT_KEY_ID,
"cloudfront_key": AWS_CLOUDFRONT_KEY,
"custom_domain": CLOUDFRONT_DOMAIN,
},
}
CSS文件(和所有其他静态内容)作为签名URL提供,例如。使用以下代码:
<link rel="stylesheet" href="{% static 'studyspot5/css/style.css' %}">
但是对于CSS文件中的URL,它只会传递文件的URL,而不会签名(没有参数)。下面是生成的请求头。请注意,referer URL是签名的,但CSS中的背景图像不是!
1条答案
按热度按时间cygmwpex1#
我最终选择了第二个公共桶,尽管这违背了使用cloudfront的全部目的。至少我的大部分内容将通过签名的网址,这比没有好。
我从一个类似的问题中得到了这个想法:Static website private content Amazon S3 and Cloudfront - css, js and images not showing。