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

Debian VPS上如何通过Django整合部署多个Web应用?

实现方案

你这个需求不需要让Django处理流量转发,核心用Nginx基于名称的虚拟主机+反向代理就能实现,流量分发全在Nginx层完成,性能远高于走Django转发,也不会出现单个服务故障拖垮全站的问题。Django只需要负责根域名的博客业务,在主页模板加上各服务的子域名导航链接就能实现统一入口效果。


前置操作(Debian环境)

  • 安装Nginx并放行端口
    sudo apt update && sudo apt install nginx -y
    sudo ufw allow 'Nginx Full'
    
  • 提前把域名解析做好:webpage.com和*.webpage.com都A记录指向你的VPS公网IP。
  • 所有后端服务(Django、GitLab、Wallabag等)启动时仅绑定127.0.0.1的本地端口,不要绑定0.0.0.0暴露公网,每个服务分配不同本地端口避免冲突,参考端口分配:
    • Django(Gunicorn/uWSGI):127.0.0.1:8000
    • GitLab CE:127.0.0.1:8081
    • Wallabag:127.0.0.1:8082
    • FluxRSS:127.0.0.1:8083

    注意:Veloren是游戏服务,游戏本身的TCP/UDP业务端口不需要走Nginx反代,直接放行对应防火墙端口即可,只有它的Web管理面板需要走反代。


具体配置步骤

1. 配置GitLab CE适配反向代理

GitLab默认自带内置Nginx会占用80/443端口,需要先修改配置让它监听本地端口:

  • 编辑GitLab配置文件/etc/gitlab/gitlab.rb,修改以下参数:
    external_url 'http://gitlab.webpage.com'
    nginx['listen_port'] = 8081
    nginx['listen_https'] = false
    nginx['listen_addresses'] = ['127.0.0.1']
    
  • 执行命令让配置生效:sudo gitlab-ctl reconfigure

2. 编写Nginx分发规则

Nginx的站点配置统一放在/etc/nginx/sites-available/目录下,配置完成后软链接到/etc/nginx/sites-enabled/即可生效。

根域名(Django博客)配置

新建配置文件/etc/nginx/sites-available/webpage.com,内容参考:

server {
    listen 80;
    server_name webpage.com;

    # Django静态资源路径,改成你自己的静态文件目录
    location /static/ {
        alias /path/to/your/django/static/;
    }
    location /media/ {
        alias /path/to/your/django/media/;
    }

    # 反向代理到本地Django服务
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

GitLab子域名配置

新建配置文件/etc/nginx/sites-available/gitlab.webpage.com,内容参考:

server {
    listen 80;
    server_name gitlab.webpage.com;

    location / {
        proxy_pass http://127.0.0.1:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        # GitLab需要的额外请求头,避免跳转、资源加载异常
        proxy_set_header X-Forwarded-Ssl on;
        proxy_buffering off;
        proxy_request_buffering off;
        client_max_body_size 256m;
    }
}

其他服务通用配置模板

Wallabag、FluxRSS、Veloren面板的配置逻辑完全一致,只需要改server_name和proxy_pass对应的本地端口即可,请求头部分和上面Django的配置通用。

3. 启用配置并验证

# 把配置软链接到启用目录
sudo ln -s /etc/nginx/sites-available/webpage.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/gitlab.webpage.com /etc/nginx/sites-enabled/
# 测试配置语法是否正确
sudo nginx -t
# 测试通过后重载Nginx生效
sudo systemctl reload nginx

4. 配置HTTPS(可选但推荐)

直接用certbot自动申请Let's Encrypt证书并自动改写Nginx配置:

sudo apt install python3-certbot-nginx -y
sudo certbot --nginx

按提示选择需要配置证书的域名即可,工具会自动配置证书续期。


检索关键词参考

你之前搜不到对应方案是关键词选偏了,不需要搜Django相关的转发配置,直接搜以下关键词就能找到大量参考:

  • Nginx 基于名称的虚拟主机
  • Nginx 子域名反向代理
  • 自托管多服务Nginx反代
  • GitLab CE 反向代理部署

常见排错点

  • 每次修改Nginx配置后必须先执行nginx -t验证语法,确认无错再重载服务
  • 如果出现服务跳转127.0.0.1、资源加载404,基本都是反向代理的Host请求头没配置对
  • 不要让多个服务同时监听同一个公网端口,否则会出现端口冲突导致Nginx启动失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:15:28