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

Django API通过HTTP访问正常HTTPS访问失败问题求助

故障原因分析及解决方案

核心根本原因

你当前部署的Django服务全程只开启了HTTP协议支持,没有任何HTTPS相关配置,自然无法响应HTTPS请求,结合你给出的配置,还有以下几个配置冲突/错误点:

  • 启动命令&端口冲突:Dockerfile中默认启动命令是gunicorn监听8888端口,但docker-compose配置里的command字段直接覆盖了默认启动命令,改成了Django开发服务器runserver监听8000端口,同时端口映射只开放了8000端口。如果你是用docker-compose启动服务,那你访问8888端口本身就不会命中docker-compose启动的容器,你测试到的8888端口HTTP可访问,说明你大概率是单独启动了Dockerfile构建的容器,没有使用docker-compose配置。
  • 服务本身不支持HTTPS:
    1. Django自带的runserver是开发调试用服务器,本身就不支持HTTPS协议,也不能用于生产环境。
    2. 你Dockerfile中默认用的gunicorn默认也只跑HTTP服务,需要额外配置SSL证书参数才能开启HTTPS支持。

修复方案

方案1:gunicorn直接配置HTTPS(适合小规模部署)

  1. 提前申请好对应访问地址的SSL证书(pem/crt格式证书文件 + key格式私钥文件),放到项目目录下
  2. 修改Dockerfile中的CMD启动命令,添加SSL相关参数:
CMD gunicorn Documents_management_back.wsgi:application --bind 0.0.0.0:$PORT --certfile=你的证书文件路径 --keyfile=你的私钥文件路径
  1. 注意如果直接用IP访问HTTPS的话,需要证书颁发机构支持IP证书,普通域名证书访问IP时会报证书不安全错误。

方案2:增加Nginx反向代理处理HTTPS(推荐生产环境使用)

在docker-compose中新增Nginx服务,由Nginx监听443/8888端口的HTTPS请求,配置好SSL证书后,转发请求给后端的Django服务(后端保持HTTP即可),这种方式更易维护,性能也更好。

额外建议

生产环境不要使用Django自带的runserver启动服务,性能差且安全性低,直接用Dockerfile默认的gunicorn启动即可,删除docker-compose中多余的command字段,端口映射改成和Dockerfile的8888端口对齐,避免端口混淆。

内容的提问来源于stack exchange,提问作者Math

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:42:04