django - 403 禁止在 EC2 实例上使用 Amazon S3 的 Django 存储 css/js 文件

标签 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>/staticSTATIC_ROOT ,然后上传./manage.py collectstatic的内容和 ./manage.py compress :,即生成的 css/js 和 manifest_1.json文件到存储桶,但在浏览器中,我仍然得到 403 Forbidden在 css/js 文件上

对可能发生的事情有什么想法吗?

最佳答案

您是否在您的存储桶上设置了 CORS 策略?您可能还需要添加权限以允许“所有人”“列出”存储桶中的对象(尽管首先尝试 CORS 策略)

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

关于django - 403 禁止在 EC2 实例上使用 Amazon S3 的 Django 存储 css/js 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29925758/

相关文章:

python - 如何使用 boto3 删除 AWS 存储桶中的文件夹及其内容

用于将文件上传和下载到 Amazon S3 的 php API

使用sqlite3进行Django设置?

django - 将 gevent(或 eventlet)和 prefork worker 与 Celery 一起使用

django - 如何设置django用户权限,一个用户拥有多个权限?

amazon-web-services - AWS EC2实例导入ACM生成的证书

amazon-web-services - 如何使用 CFT 启动具有 CreditSpecification 的 Spot 车队?

django - 重命名 django-filters 中的字段名称以进行显示

ruby-on-rails - Elastic Beanstalk 上的 Sidekiq 进程 - Errno::ENOENT: 没有这样的文件或目录 - getcwd

amazon-web-services - 随机哈希前缀如何提高 S3 大规模 GET 性能?