403禁止在EC2实例上使用Amazon S3的Django Storages css / js文件

时间:2015-04-28 17:10:07

标签: django amazon-ec2 amazon-s3 django-storage

我一直在谷歌上搜索两天,没有一个答案可以解决这个问题。

设置

AWS_S3_ACCESS_KEY_ID = 'xxxxxxx'
AWS_S3_SECRET_ACCESS_KEY = 'xxxxxxxxx'
AWS_STORAGE_BUCKET_NAME = 'my-bucket.mycompany.com'
COMPRESS_URL = 'http://{}.s3.amazon.com/'.format(AWS_STORAGE_BUCKET_NAME)
STATIC_URL = COMPRESS_URL
AWS_S3_FILE_OVERWRITE = True
AWS_S3_SECURE_URLS = True
AWS_QUERYSTRING_AUTH = False
AWS_S3_CUSTOM_DOMAIN = '{}.s3-external-3.amazonaws.com'.format(AWS_STORAGE_BUCKET_NAME)

谷歌搜索

Incorrect date/time on server:这是一个EC-2实例,但即使我安装了yum install ntp ntpdate ntp-doc - 没有运气

AWS_QUERY_STRING_AUTH:网上有多个来源说要做到这一点,但没有解决我的问题

AWS_QUERY_STRING_AUTH:又一次

AWS_S3_CUSTOM_DOMAIN这里没有运气

实验

# ON THE EC2 BOX
./manage.py shell
from boto.s3.connection import S3Connection
from django.conf import settings
conn = S3Connection(settings.AWS_S3_ACCESS_KEY_ID, settings.AWS_S3_SECRET_ACCESS_KEY)
b = conn.get_bucket('my-bucket.mycompany.com')
key = b.get_key('500.html')
print key.get_contents_as_string()  # WORKS FINE

然而,当我运行./manage.py compress时,我得到了

CommandError: An error occured during renderinghome_4770.html:
'https://mybucket.mycompany.com.s3-external-3.amazonaws.com/css/smoothness/jquery-ui-1.10.1.custom.css'
 isn't accessible via COMPRESS_URL    ('http://mybucket.mycompany.com.s3.amazon.com/') and can't be compressed

在您提出之前,是的,该文件在该存储桶上可用。我还尝试了传统的django-storages离线压缩方式,使用<project-root>/static作为STATIC_ROOT,然后上传./manage.py collectstatic./manage.py compress:的内容,即生成的css / js和manifest_1.json文件到存储桶,但在浏览器中,我仍然在css / js文件上获得403 Forbidden

关于可能发生什么的任何想法?

3 个答案:

答案 0 :(得分:0)

您是否在桶上设置了CORS策略?您可能还需要添加权限以允许&#34; Everyone&#34;到&#34;列表&#34;存储桶中的对象(尽管首先尝试CORS策略)

编辑: 以下是文档:http://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html

答案 1 :(得分:0)

您是否检查过css文件元数据(==&gt;文件==&gt;属性)?

确保将它们设置为css文件,而不是: &#34;二进制/八位字节流&#34;

像AWS一样。

答案 2 :(得分:0)

我遇到类似的问题,似乎是由storage.CachedStaticFilesStoragestorage.backends.s3boto.S3BotoStorage混合引起的。

我没有时间诊断问题(这可能涉及我的CACHES设置),但是没有使用storage.CachedStaticFilesStorage来修复我的问题。

我正在使用django-require-s3包,并进行了以下设置:

DEFAULT_FILE_STORAGE = STATICFILES_STORAGE = 'require_s3.storage.OptimizedCachedStaticFilesStorage'

第一个解决方案:https://stackoverflow.com/a/19110977/1074659

# Add
AWS_QUERYSTRING_AUTH = False

第二个解决方案:

# Alter
DEFAULT_FILE_STORAGE = STATICFILES_STORAGE = 'require_s3.storage.OptimizedStaticFilesStorage'