You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Django项目wsgi.url_scheme为http及Nginx与Gunicorn通信疑问

问题1:Django中wsgi.url_scheme值为http的解决方法

核心原因是Django默认不会信任代理传递的X-Forwarded-Proto头,需要手动配置信任规则:

  1. 打开Django项目的settings.py文件,添加以下配置:
# 信任前端代理传递的https标识头
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# 启用代理传递的Host头
USE_X_FORWARDED_HOST = True
# 关闭Django自带的SSL跳转,SSL逻辑已经由Apache处理
SECURE_SSL_REDIRECT = False
  1. 可选修正nginx配置的语法错误:你原有nginx配置里的proxy_set_header X-Forwarded-Ssl=on;写法错误,等号要换成空格,改为proxy_set_header X-Forwarded-Ssl on;,不过只要配置了上面的Django参数,仅靠X-Forwarded-Proto头就可以正常识别https协议。
  2. 重启Django服务即可看到wsgi.url_scheme变为https。

问题2:简化nginx配置后依然能正常运行的原因

你看到的简化后配置生效是假象,本质原因是你修改的本地nginx配置没有同步到容器内:

  • 查看你的docker-compose.yml配置,project-nginx服务没有挂载本地nginx配置文件到容器内的对应目录,你在本地修改app.conf之后,既没有重新构建nginx镜像,也没有把本地配置挂载进容器,容器内运行的还是最初构建镜像时打包进去的、带upstream project { server project-python:5000; }块的完整配置,所以服务可以正常运行。
  • 如果你想让本地修改的nginx配置实时生效,需要给project-nginx服务添加volumes配置,把本地存放nginx配置的目录挂载到容器的/etc/nginx/conf.d/路径下,之后修改本地配置后重启nginx容器即可生效。如果此时你再删除upstream块,nginx就会找不到project对应的上游服务,直接报错。

内容的提问来源于stack exchange,提问作者Diego Armando Maradona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:45:03