Django MEDIA_URL 返回 https 而不是 http

Posted

技术标签:

【中文标题】Django MEDIA_URL 返回 https 而不是 http【英文标题】:Django MEDIA_URL returns http instead of https 【发布时间】:2020-03-23 02:09:34 【问题描述】:

我正在使用 Django 2.2.xDRF

我有一个带有 FileField 的模型

file = models.FileField(upload_to=get_media_upload_path)

文件正在上传,但在访问 obj.file 时,它给出的 URL 没有 HTTPS

http://example.com/media/image.jpg

我希望它是

https://example.com/media/image.png

重定向已在 nginx 配置中设置。但我想要https 的响应网址。

设置

MEDIA_URL = '/media_/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static_cdn', 'media_root')

【问题讨论】:

您的设置中的MEDIA_URL 是什么? 使用设置更新问题 如果 MEDIA_URL = '/media_/' 并且您的 Django 服务器在 https:// 上运行,那么媒体文件也应该是 https。如果 Django 服务器在 http:// 上运行并且您希望媒体文件在 https:// 上,则使用 MEDIA_URL = 'https://example.com/media_/' 【参考方案1】:

首先,确保 Nginx 正在发送 X-Forwarded-Proto 标头,它应该设置为:

proxy_set_header X-Forwarded-Proto https;

然后在您的 Django 设置中添加以下内容:

USE_X_FORWARDED_HOST = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

这样你将指示 Django 使用代理传递的 proto。

【讨论】:

X-Forwarded-Protocol吗?我在 nginx 配置中有proxy_set_header X-Forwarded-Protocol $scheme; 不,是X-Forwarded-Proto: nginx.com/resources/wiki/start/topics/examples/forwarded

以上是关于Django MEDIA_URL 返回 https 而不是 http的主要内容,如果未能解决你的问题,请参考以下文章

[django]media_url

Django - MEDIA_ROOT 和 MEDIA_URL

MEDIA_URL 在 Django 1.4 中为空

Django MEDIA_URL 空白 @DEPRECATED

Django - MEDIA_URL 仍然与 S3BotoStorage 相关吗?

为 Django Heroku 应用程序、Amazon S3 设置 MEDIA_URL