Django不会使用自定义域从Amazon S3提供静态文件

时间:2017-01-02 13:32:26

标签: python django amazon-s3 boto django-storage

我确实在Amazon S3上设置了我的Django项目,DNS和存储桶python manage.py collectstatic,因此手动上传的文件也无效。

AWS S3设置:

存储桶名称:files.domain.com

铲斗政策:

{
  "Id": "Policy1483363850641",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1483363848944",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::files.domain.com/*",
      "Principal": "*"
    }
  ]
}

DNS设置:

files.domain.com - > CNAME - > files.domain.com.s3.amazonaws.com

Django设置:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = 'XXXXXXXXXXXXXXXXXXXX'
AWS_SECRET_ACCESS_KEY = 'XxXxXXxXXXXXxxxXxxXXXxXxxXXXXXXXXxxxXxxx'
AWS_STORAGE_BUCKET_NAME = 'files.domain.com'
AWS_AUTO_CREATE_BUCKET = False
AWS_QUERYSTRING_AUTH = False
AWS_S3_SECURE_URLS = False
AWS_EXPIRY = 60 * 60 * 24 * 7
AWS_HEADERS = {
    'Cache-Control': six.b('max-age=%d, s-maxage=%d, must-revalidate' % (
        AWS_EXPIRY, AWS_EXPIRY))
}

MEDIA_URL = 'http://%s/' % AWS_STORAGE_BUCKET_NAME
STATICFILES_STORAGE = DEFAULT_FILE_STORAGE
STATIC_URL = MEDIA_URL

2 个答案:

答案 0 :(得分:2)

我将这些行包含在我的Django设置和Amazon S3上,自定义域工作正常。

AWS_S3_CALLING_FORMAT = 'boto.s3.connection.OrdinaryCallingFormat'
AWS_S3_HOST = 's3-sa-east-1.amazonaws.com'
AWS_S3_CUSTOM_DOMAIN = AWS_STORAGE_BUCKET_NAME

答案 1 :(得分:1)

问题与在名称上使用点有关。尝试使用:

AWS_S3_CALLING_FORMAT = boto.s3.connection.OrdinaryCallingFormat()

但我不知道这是否仍然有效,因为我个人刚刚在STATICS桶上使用了点。无论如何我使用CDN,所以S3存储桶名称无关紧要。

请参阅https://github.com/boto/boto/issues/2836