我创建了一个数字海洋存储空间。空格的url为ashttps://storagespace.nyc3.digitaloceanspaces.com
然而,当我点击url打开浏览器时,我得到以下错误:
<Error>
<Code>AccessDenied</Code>
<BucketName>storagespace</BucketName>
<RequestId>tx000000000000001618a5e-0081246af3-1805687a-nyc3c</RequestId>
<HostId>1805987a-nyc3c-nyc3-zg03</HostId>
</Error>
我不知道这个错误是什么意思或为什么我有它。我连接s3桶与我的django网站和静态文件不被服务于浏览器,而不是我得到403禁止错误。请问我如何删除这个access denied
错误?
请关注他们的官方教程:https://www.digitalocean.com/community/tutorials/how-to-set-up-a-scalable-django-app-with-digitalocean-managed-databases-and-spaces
不幸的是,我们真的不知道你在用什么包(比如你是用django -storage把那些静态文件放到S3上的吗?)我没有数字海洋的经验,但这里有一些尝试:
- 安装Django-storages。在AWS中创建IAM角色,仅对该桶提供S3的完全访问权限。不幸的是,我没有数字海洋的经验,所以我不知道你是否能做到这一点。
- 浏览一下digital ocean网站,看看他们是否有自己的方式上传Django静态文件。例如,以下是由Digital Ocean为Django提供的官方数字海洋教程:https://www.digitalocean.com/community/tutorials/how-to-set-up-a-scalable-django-app-with-digitalocean-managed-databases-and-spaces
正如你在教程中看到的,他们有这些设置,我想数字海洋已经提供给你了:
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/
# Moving static assets to DigitalOcean Spaces as per:
# https://www.digitalocean.com/community/tutorials/how-to-set-up-object-storage-with-django
AWS_ACCESS_KEY_ID = 'your_spaces_access_key'
AWS_SECRET_ACCESS_KEY = 'your_spaces_secret_key'
AWS_STORAGE_BUCKET_NAME = 'your_space_name'
AWS_S3_ENDPOINT_URL = 'spaces_endpoint_URL'
AWS_S3_CUSTOM_DOMAIN = 'spaces_edge_endpoint_URL'
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'static'
AWS_DEFAULT_ACL = 'public-read'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATIC_URL = '{}/{}/'.format(AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATIC_ROOT = 'static/'
问题是您在运行python manage.py collectstatic
时在settings.py
中丢失了AWS_DEFAULT_ACL = 'public-read'
。现在,您需要返回并将所有抛出403 Forbidden
错误的文件的权限手动设置为public-read
。我建议在将来的collectstatic
命令设置中也添加AWS_DEFAULT_ACL = 'public-read'
。