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.x 和 DRF。
我有一个带有 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_ROOT 和 MEDIA_URL
Django MEDIA_URL 空白 @DEPRECATED