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

如何在同一服务器的同一个子域名下部署两个Flask应用

实现方案

你可以根据使用场景选择以下两种方案:


方案1:子目录路径匹配(推荐,对外仅暴露1个端口)

这种方案符合你给出的sub.domain.com/1、sub.domain.com/2的示例,对外不用暴露额外端口,更适合生产环境。

  • 新增Nginx反向代理服务,可以直接用Docker部署Nginx容器,也可以直接在宿主机安装Nginx,确保Nginx可以访问到两个Flask容器的服务端口。
  • 提前适配两个Flask应用的路径配置:分别给两个应用设置APPLICATION_ROOT参数,第一个设为/1,第二个设为/2,避免路由跳转、静态资源加载时出现路径错误。
  • 新增Nginx站点配置,示例如下:
server {
    listen 80;
    server_name sub.domain.com;

    # 转发第一个Flask应用的请求
    location /1/ {
        # 末尾的斜杠不能省略,会自动去除路径中的/1前缀再转发给应用
        proxy_pass http://flask1容器名或内网IP:5000/;
        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;
    }

    # 转发第二个Flask应用的请求
    location /2/ {
        proxy_pass http://flask2容器名或内网IP:5000/;
        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;
    }
}
  • 调整Docker网络配置:把Nginx容器和两个Flask容器加入同一个自定义Docker网桥,不需要合并两个应用的docker-compose配置,只要网络互通即可。

方案2:不同端口暴露(配置简单,适合内部测试场景)

不需要额外部署反向代理,配置门槛更低。

  • 分别修改两个Flask应用的docker-compose.yml,将容器的服务端口映射到宿主机的不同公网端口,比如第一个应用配置ports: 8001:5000,第二个应用配置ports: 8002:5000。
  • 放开服务器防火墙的8001、8002端口公网访问权限,访问时直接使用sub.domain.com:8001、sub.domain.com:8002即可。

注意事项
  • 用子目录方案时,Flask应用内部的路由、静态资源引用优先用url_for()函数生成,会自动拼接你配置的APPLICATION_ROOT前缀,避免出现404问题。
  • 生产环境建议给Nginx配置HTTPS证书,两个应用可以共用同一个子域名的证书。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 12:18:01