11

当使用 django-storage s3 提供媒体时,正在生成的媒体 url 是这样的:

https://mybucket.s3.amazonaws.com/myimage.jpg?Signature=5ifoyLqzmtfVNS1ovfzVvN92RH0%3D&Expires=1363124819&AWSAccessKeyId=AKIAJ7ZTU7K4SPYKGOFA

由于https导致图像不显示:

    You attempted to reach mybucket.s3.amazonaws.com,
 but instead you actually reached a server identifying itself as *.s3.amazonaws.com.
 This may be caused by a misconfiguration on the server or by something more serious. An attacker on your network could be trying to get you to visit a fake (and potentially harmful) version of mybucket.s3.amazonaws.com.

我需要将图像作为 HTTP 而不是 HTTPS

我的设置是:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = "AKIAJ....K4SPYKGOFA"
AWS_SECRET_ACCESS_KEY = "2Y7G98JoCRzAEp....rPoCjWZuwDaQ"
AWS_STORAGE_BUCKET_NAME = "mybucket"

我尝试将 media_url 和 s3_url 设置为正常的 http,但它没有改变任何东西。

我正在使用 django 1.5

4

2 回答 2

16

我会尝试将此属性添加到您的设置中:

AWS_S3_SECURE_URLS = False

简要浏览一下 django-storages 文档后,它看起来并没有被记录,但是这个博客更多地讨论了它。 http://www.eliotk.net/05/30/force-http-with-django-storages-and-s3boto/

于 2013-03-12T21:16:39.213 回答
9

你可能可以用一个AWS_S3_SECURE_URLS = False. 然而,这些设置在当前版本1.1.6中不断变化,因此这里有一些有关相关设置的详细信息:

AWS_S3_SECURE_URLS = False
AWS_S3_URL_PROTOCOL = 'http'
AWS_STORAGE_BUCKET_NAME = 'mybucket'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME

AWS_S3_URL_PROTOCOL 是方法,如果设置为空字符串,则允许协议相对 URL。为了向后兼容,您仍然需要 AWS_S3_SECURE_URLS。如果您使用的是 AWS_S3_URL_PROTOCOL,目前 AWS_S3_CUSTOM_DOMAIN 是必需的。这是一些关于使用 S3Boto 后端实现协议相关 URL 的开发人员讨论

还值得注意的是 Django-storages 提供了一个 S3 后端以及一个不同的 S3Boto 后端。尽管您的代码确实如此,但您的问题并没有使您正在使用的问题清晰。

于 2013-03-12T21:31:21.087 回答