Django存储s3媒体网址是https://而不是http://

时间:2013-03-12 21:01:27

标签: django amazon-s3 django-storage

使用django-storage s3提供媒体时,正在生成的媒体网址如下:

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

2 个答案:

答案 0 :(得分:15)

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

AWS_S3_SECURE_URLS = False

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

答案 1 :(得分:8)

你可以用一个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是 new 方式,如果设置为空字符串,则允许协议相对URL。为了向后兼容,您仍需要AWS_S3_SECURE_URLS。如果您使用的是AWS_S3_URL_PROTOCOL,那么目前AWS_S3_CUSTOM_DOMAIN为necessary。以下是使用S3Boto后端实现协议相对URL的开发人员discussion

值得注意的是Django-storages提供S3后端以及不同的S3Boto后端。虽然您的代码确实存在,但您的问题并未使您使用的问题清晰。