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

Apache同IP同端口如何通过不同路径访问多个Flask应用

实现方案:Apache配置同端口多Flask项目路径分发

可以实现,通过Apache的mod_wsgi模块配合别名规则即可完成需求,具体操作步骤如下:

前置准备

首先安装必要的Apache模块和依赖:

  • Debian/Ubuntu系统执行:
sudo apt update
sudo apt install apache2 libapache2-mod-wsgi-py3
sudo a2enmod wsgi
  • CentOS/RHEL系统执行:
sudo dnf install httpd python3-mod_wsgi
sudo systemctl enable httpd

步骤1:编写各项目的WSGI入口文件

分别给两个Flask项目创建WSGI启动文件,示例如下:

flask1项目

在/var/www/flask1/目录下创建app.wsgi,内容如下:

# 若使用虚拟环境,先激活虚拟环境
# activate_this = '/var/www/flask1/venv/bin/activate_this.py'
# with open(activate_this) as f:
#     exec(f.read(), {'__file__': activate_this})

import sys
sys.path.insert(0, '/var/www/flask1')

# 假设你的Flask实例在app.py文件中,实例名称为app,按需修改
from app import app as application

flask2项目

在/var/www/flask2/目录下创建app.wsgi,内容如下:

# 若使用虚拟环境,先激活虚拟环境
# activate_this = '/var/www/flask2/venv/bin/activate_this.py'
# with open(activate_this) as f:
#     exec(f.read(), {'__file__': activate_this})

import sys
sys.path.insert(0, '/var/www/flask2')

# 假设你的Flask实例在app.py文件中,实例名称为app,按需修改
from app import app as application

步骤2:修改Apache虚拟主机配置

编辑默认80端口的站点配置文件:

  • Debian/Ubuntu路径:/etc/apache2/sites-available/000-default.conf
  • CentOS/RHEL路径:/etc/httpd/conf.d/httpd.conf

在<VirtualHost *:80>标签内添加以下配置:

# 配置flask1路径分发
Alias /flask1 /var/www/flask1
WSGIScriptAlias /flask1 /var/www/flask1/app.wsgi
<Directory /var/www/flask1>
    Require all granted
    AllowOverride All
</Directory>

# 配置flask2路径分发
Alias /flask2 /var/www/flask2
WSGIScriptAlias /flask2 /var/www/flask2/app.wsgi
<Directory /var/www/flask2>
    Require all granted
    AllowOverride All
</Directory>

步骤3:调整Flask项目适配路径前缀

需要给两个Flask项目配置应用根路径,避免路由出错:

  • flask1项目入口文件(如app.py)中添加:
app.config['APPLICATION_ROOT'] = '/flask1'
  • flask2项目入口文件(如app.py)中添加:
app.config['APPLICATION_ROOT'] = '/flask2'

该配置会自动给项目内所有路由、url_for生成的路径加上对应前缀,无需手动修改路由规则

步骤4:配置权限并重启服务

  1. 给Apache运行用户授予项目目录权限:
sudo chown -R www-data:www-data /var/www/flask1 /var/www/flask2
  1. 安装项目依赖(若使用虚拟环境需先激活对应虚拟环境):
cd /var/www/flask1
pip3 install -r requirements.txt

cd /var/www/flask2
pip3 install -r requirements.txt
  1. 测试Apache配置合法性:
# Debian/Ubuntu
sudo apache2ctl configtest
# CentOS/RHEL
sudo httpd -t
  1. 配置返回Syntax OK后重启Apache服务生效:
# Debian/Ubuntu
sudo systemctl restart apache2
# CentOS/RHEL
sudo systemctl restart httpd

常见问题排查

  • 访问返回403:检查项目目录权限、SELinux状态(CentOS可临时关闭sudo setenforce 0验证)
  • 访问返回500:查看Apache错误日志定位问题,日志路径为/var/log/apache2/error.log(Debian/Ubuntu)或/var/log/httpd/error_log(CentOS/RHEL)
  • 路由404:确认Flask项目已配置APPLICATION_ROOT参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 05:48:03