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

Apache反向代理多域名分流失败及Django应用非标准端口部署咨询

Apache反向代理多域名分流失败及Django应用非标准端口部署咨询

先聊聊你碰到的反向代理SSL握手问题

从你贴的Apache错误日志来看,核心问题是反向代理到后端Django服务的SSL握手失败。我帮你分析下,大概率是这俩原因:

  • 后端Django服务的SSL证书是针对mysite.org的,但你代理时用的是IP192.168.1.83,证书里的域名和请求的IP不匹配,直接触发了SSL校验失败
  • 可能后端的Web服务器(不管是Apache还是Django用的WSGI服务)没正确配置允许代理请求的SSL握手逻辑,比如没开相关的宽松校验(当然宽松校验只适合排查,不能长期用)

不过既然你已经打算换思路,让Django用非标准端口部署,那我重点给你梳理这个方案的具体操作步骤:

方案一:直接修改Django服务的监听端口(适合测试/小流量场景)

如果是用Django自带的runserver(注意这玩意儿不适合生产环境哈),直接指定端口启动就行:

python manage.py runserver 0.0.0.0:8080

要是用生产级的WSGI服务器比如Gunicorn,就改启动命令的端口参数:

gunicorn --bind 0.0.0.0:8080 myproject.wsgi:application

然后去你的Matrix服务器的Traefik里加一条路由规则:

  • 针对Django的专属域名(比如django.mysite.org),把流量转发到192.168.83:8080
  • 放心,Traefik会自动给这个域名生成并维护Let's Encrypt证书,你不用再单独给Django管SSL的事儿了

方案二:修改后端Web服务器的监听端口(生产环境推荐)

如果你的Django还是用Apache/Nginx做前端Web服务器,那改它的端口配置就行:

如果你用Apache:

  1. 找到Apache的端口配置文件(一般是/etc/apache2/ports.conf),把原来的Listen 443改成Listen 8080,要是需要HTTP跳转HTTPS,把Listen 80改成Listen 8081
  2. 找到你的Django站点配置文件(比如/etc/apache2/sites-available/django.conf),把<VirtualHost *:443>改成<VirtualHost *:8080>,<VirtualHost *:80>改成<VirtualHost *:8081>
  3. 重启Apache生效:
sudo systemctl restart apache2

如果你用Nginx:

  1. 打开Nginx的Django站点配置,把listen 443 ssl;改成listen 8080 ssl;,listen 80;改成listen 8081;
  2. 重启Nginx:
sudo systemctl restart nginx

之后回到Matrix服务器的Traefik,添加新路由:

  • 把django.mysite.org的流量转发到192.168.83:8080(用HTTPS)或者192.168.83:8081(用HTTP,让Traefik统一处理SSL)
  • 这样对外的流量还是走标准的80/443端口,Traefik自动帮你做域名分流,后端两个服务各用各的端口,完全不会冲突

额外要注意的点

  • 别忘了给两台VM的防火墙开放对应的非标准端口(比如8080/8081),不然Traefik连不上后端服务
  • 如果让Traefik统一处理所有SSL,后端其实可以不用自己配置证书了,直接用HTTP监听就行,能省不少配置麻烦
  • 要是你还想试试原来的反向代理方案,可以临时在Apache的代理配置里加SSLProxyVerify none和SSLProxyCheckPeerCN off跳过证书校验,看看是不是域名不匹配的问题,但生产环境绝对别这么干,要么给证书加IP的SAN字段,要么用域名来代理

备注:内容来源于stack exchange,提问作者Sati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 10:13:11