Django中使用DigitalOcean CDN时URL无签名致访问被拒
解决DigitalOcean Spaces静态资源URL访问被拒问题
你的配置信息如下:
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) DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
生成的无签名URL访问时提示"access denied",核心原因是资源权限为私有,解决方案如下:
修改ACL配置为公开读
将AWS_DEFAULT_ACL = None替换为:AWS_DEFAULT_ACL = 'public-read'这个设置会让上传的静态资源默认拥有公开读取权限,无签名URL就能正常访问。
验证DigitalOcean Spaces桶权限
登录DigitalOcean控制台,进入你的allio1桶:- 检查桶的权限策略,确保允许对
allio-static路径下的资源进行公共读取 - 确认CDN配置未限制该路径的访问
- 检查桶的权限策略,确保允许对
重新上传静态资源
修改配置后,执行以下命令重新收集并上传静态资源,确保新资源应用正确的ACL:python manage.py collectstatic
另外,配置中重复了STATICFILES_STORAGE,建议删除重复行,保持配置简洁。
内容的提问来源于stack exchange,提问作者Aditya
相关产品推荐
相关产品推荐

