403 Forbidden on Django Storages css/js files with Amazon S3 on an EC2 Instance

Posted

技术标签:

【中文标题】403 Forbidden on Django Storages css/js files with Amazon S3 on an EC2 Instance【英文标题】: 【发布时间】:2015-07-07 16:16:14 【问题描述】:

我已经在谷歌上搜索了两天,但没有一个答案能解决问题。

设置

AWS_S3_ACCESS_KEY_ID = 'xxxxxxx'
AWS_S3_SECRET_ACCESS_KEY = 'xxxxxxxxx'
AWS_STORAGE_BUCKET_NAME = 'my-bucket.mycompany.com'
COMPRESS_URL = 'http://.s3.amazon.com/'.format(AWS_STORAGE_BUCKET_NAME)
STATIC_URL = COMPRESS_URL
AWS_S3_FILE_OVERWRITE = True
AWS_S3_SECURE_URLS = True
AWS_QUERYSTRING_AUTH = False
AWS_S3_CUSTOM_DOMAIN = '.s3-external-3.amazonaws.com'.format(AWS_STORAGE_BUCKET_NAME)

谷歌搜索

Incorrect date/time on server :这是一个 EC-2 实例,但即使我安装了 yum install ntp ntpdate ntp-doc -- 没有运气

AWS_QUERY_STRING_AUTH :网上多个消息来源说要这样做,但没有解决我的问题

AWS_QUERY_STRING_AUTH: 又是一次

AWS_S3_CUSTOM_DOMAIN这里也没有运气

实验

# ON THE EC2 BOX
./manage.py shell
from boto.s3.connection import S3Connection
from django.conf import settings
conn = S3Connection(settings.AWS_S3_ACCESS_KEY_ID, settings.AWS_S3_SECRET_ACCESS_KEY)
b = conn.get_bucket('my-bucket.mycompany.com')
key = b.get_key('500.html')
print key.get_contents_as_string()  # WORKS FINE

但是当我运行./manage.py compress 时,我得到了

CommandError: An error occured during renderinghome_4770.html:
'https://mybucket.mycompany.com.s3-external-3.amazonaws.com/css/smoothness/jquery-ui-1.10.1.custom.css'
 isn't accessible via COMPRESS_URL    ('http://mybucket.mycompany.com.s3.amazon.com/') and can't be compressed

在您询问之前,是的,该文件在该存储桶上可用。我还尝试了传统的django-storages离线压缩方式,使用<project-root>/static作为STATIC_ROOT,然后上传./manage.py collectstatic./manage.py compress的内容:,即生成的css/js和manifest_1.json文件到桶,但在浏览器中,我仍然在 css/js 文件上得到403 Forbidden

对可能发生的事情有什么想法吗??

【问题讨论】:

【参考方案1】:

我遇到了类似的问题,似乎是由 storage.CachedStaticFilesStoragestorage.backends.s3boto.S3BotoStorage 混合引起的。

我没有时间诊断问题(这可能涉及我的CACHES 设置),但没有将storage.CachedStaticFilesStorage 与 S3 一起使用解决了我的问题。

我正在使用django-require-s3 包并进行了以下设置:

DEFAULT_FILE_STORAGE = STATICFILES_STORAGE = 'require_s3.storage.OptimizedCachedStaticFilesStorage'

第一个解决方案:https://***.com/a/19110977/1074659

# Add
AWS_QUERYSTRING_AUTH = False

第二种解决方案:

# Alter
DEFAULT_FILE_STORAGE = STATICFILES_STORAGE = 'require_s3.storage.OptimizedStaticFilesStorage'

【讨论】:

【参考方案2】:

您是否检查了您的 css 文件元数据(==> 文件 ==> 属性)?

确保它们被设置为 css 文件,而不是: “二进制/八位字节流”

就像 AWS 有时一样。

【讨论】:

【参考方案3】:

您是否在存储桶上设置了 CORS 政策?您可能还需要添加权限以允许“所有人”“列出”存储桶中的对象(尽管先尝试 CORS 策略)

编辑: 以下是文档:http://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html

【讨论】:

我都试过了,但似乎都不起作用。错误保持不变。我的 CORS 策略是 GET 和 PUT

以上是关于403 Forbidden on Django Storages css/js files with Amazon S3 on an EC2 Instance的主要内容,如果未能解决你的问题,请参考以下文章

403 Forbidden nginx/1.18.0 (Ubuntu) for Django 3.1,在媒体文件和管理 css 中面临问题

Django CSRF 和 axios 发布 403 Forbidden

403 Forbidden on laravel项目,但没有别的

403 Forbidden on wamp server

Django - 403 Forbidden - CSRF 令牌丢失或不正确

django 在背景图像上返回 403 Forbidden