Отсутствие подписи в конце url при использовании digital ocean cdn в django
Это моя конфигурация
AWS_ACCESS_KEY_ID = 'keyid'
AWS_SECRET_ACCESS_KEY = 'accesskey'
AWS_STORAGE_BUCKET_NAME = 'allio1'
AWS_S3_ENDPOINT_URL = 'https://sfo3.digitaloceanspaces.com'
AWS_S3_CUSTOM_DOMAIN = 'allio1.sfo3.cdn.digitaloceanspaces.com'
AWS_DEFAULT_ACL = None
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'allio-static'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATIC_URL = '{}/{}/'.format(AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
В конце url нет подписи. Это просто обычный url, например https://allio1.sfo3.cdn.digitaloceanspaces.com/allio-static/assets/bootstrap/css/bootstrap.min.css В конце url нет подписи и написано access denied
Я тоже обнаружил ту же проблему, и похоже, что действительно django-storages не генерирует подпись, когда AWS_S3_CUSTOM_DOMAIN
определено и AWS_DEFAULT_ACL
имеет значение 'private' или None.
Как предлагается в этом выпуске django-storages issue, вы можете:
- отключите
AWS_S3_CUSTOM_DOMAIN
(или установите значение None) .
- используйте
AWS_S3_SIGNATURE_VERSION = "s3"
для того, чтобы подписанный URL работал с доменом CDN. - далее в коде замените часть статического URL, содержащую конечную точку bucket (это будет что-то вроде
{AWS_S3_ENDPOINT_URL}/{AWS_STORAGE_BUCKET_NAME}
), наAWS_S3_CUSTOM_DOMAIN
.
PS. Нечто подобное предлагается и в документации Digital Ocean: переподписанные URL с CDN Spaces.