我有一个使用 S3 作为静态文件主机的 Django 项目设置。
settings.py
AWS_STORAGE_BUCKET_NAME = 'project-1'
conn = boto.connect_s3()
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
S3_URL = 'http://project-1.s3.amazonaws.com/'
STATIC_URL = S3_URL
然后我使用模板标签在我的模板中引用静态文件,如下所示:
<script src="{% static 'js/jquery.payment.js' %}"></script>
这会在浏览器中正确呈现,但 URL 上有 3 个其他参数Signature
,Expires
、 和AWSAccessKeyId
。后两者对文件没有任何影响,但使用呈现的Signature
值访问文件会导致 InvalidAccessKeyId 错误,并显示消息“您提供的 AWS Access Key Id 在我们的记录中不存在”。
手动删除Signature
参数让我可以正常访问文件。去掉所有三个参数就可以了。去掉后两个参数中的任何一个都会导致错误:“查询字符串身份验证需要 Signature、Expires 和 AWSAccessKeyId 参数”。
Amazon 的 S3 文档显示查询字符串身份验证用于允许您访问通常需要对其进行身份验证的文件,并且该Expires
参数与我认为的缓存无关。由于这些文件似乎不需要任何身份验证(即,当没有 URL 参数时我可以访问它们),我需要帮助:
- 使 staticfiles/boto 不会在我的网址上强制使用这些参数
- 使 staticfiles/boto 获得
Signature
有效值