Отсутствие подписи в конце 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, вы можете:

  1. отключите AWS_S3_CUSTOM_DOMAIN (или установите значение None)
  2. .
  3. используйте AWS_S3_SIGNATURE_VERSION = "s3" для того, чтобы подписанный URL работал с доменом CDN.
  4. далее в коде замените часть статического URL, содержащую конечную точку bucket (это будет что-то вроде {AWS_S3_ENDPOINT_URL}/{AWS_STORAGE_BUCKET_NAME}), на AWS_S3_CUSTOM_DOMAIN.

PS. Нечто подобное предлагается и в документации Digital Ocean: переподписанные URL с CDN Spaces.

Вернуться на верх