Django 不会使用自定义域提供来自 Amazon S3 的静态文件
Django won't serve static files from Amazon S3 with custom domain
我确实在 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
此问题与在名称上使用点有关。尝试使用:
AWS_S3_CALLING_FORMAT = boto.s3.connection.OrdinaryCallingFormat()
但我不知道这是否仍然有效,因为我个人刚刚不再使用 STATICS 存储桶上的点。无论如何我都使用 CDN,所以 S3 存储桶名称无关紧要。
我在我的 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
我确实在 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
此问题与在名称上使用点有关。尝试使用:
AWS_S3_CALLING_FORMAT = boto.s3.connection.OrdinaryCallingFormat()
但我不知道这是否仍然有效,因为我个人刚刚不再使用 STATICS 存储桶上的点。无论如何我都使用 CDN,所以 S3 存储桶名称无关紧要。
我在我的 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