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

Azure Ubuntu20.04上Apache2+WSGI部署Flask应用遇超时及加载问题

问题排查与解决方案

针对你在Azure Ubuntu 20.04虚拟机上部署Flask+Apache+WSGI时遇到的超时问题,按以下步骤逐一排查:

1. 验证WSGI配置与虚拟环境关联

确保app.wsgi正确激活虚拟环境并加载Flask应用,示例配置如下:

import sys
import os
import site

# 绑定虚拟环境的依赖库路径
venv_path = '/var/www/html/FLASKAPP.web.tool/flaskapp_venv'
site.addsitedir(os.path.join(venv_path, 'lib', 'python3.9', 'site-packages'))
sys.path.insert(0, '/var/www/html/FLASKAPP.web.tool')

# 设置Flask环境变量
os.environ['FLASK_APP'] = 'main.py'
os.environ['FLASK_ENV'] = 'production'

# 导入Flask应用实例
from main import app as application

注意:确认虚拟环境的Python版本路径(python3.9)与你的实际版本匹配,且main.py中正确导出了app实例。

2. 本地测试Flask应用可用性

先排除应用本身的问题,进入虚拟环境手动启动应用并测试:

cd /var/www/html/FLASKAPP.web.tool
source flaskapp_venv/bin/activate
flask run --host=0.0.0.0 --port=5000

在VM本地执行curl http://localhost:5000,若无法返回响应,说明应用存在启动阻塞(如等待未配置的服务连接)、依赖缺失或语法错误,需先修复应用本身。

3. 匹配WSGI模块与Python版本

Ubuntu 20.04默认的mod_wsgi可能适配Python3.8,与你使用的Python3.9虚拟环境存在兼容性问题,需重新安装对应版本的模块:

# 卸载默认模块
sudo apt remove libapache2-mod-wsgi-py3
# 安装编译依赖
sudo apt install apache2-dev python3.9-dev
# 激活虚拟环境并安装适配的mod_wsgi
source /var/www/html/FLASKAPP.web.tool/flaskapp_venv/bin/activate
pip install mod_wsgi
# 获取模块配置路径
mod_wsgi-express module-config

将输出的三行配置替换到/etc/apache2/mods-available/wsgi.load,然后重启Apache:

sudo a2enmod wsgi
sudo systemctl restart apache2

4. 优化WSGI守护进程配置

在/etc/apache2/sites-available/flaskapp.com.conf中调整守护进程参数,避免资源阻塞:

<VirtualHost *:80>
    ServerName <你的VM IP>
    # 配置守护进程,指定虚拟环境路径
    WSGIDaemonProcess flaskapp user=www-data group=www-data threads=5 python-home=/var/www/html/FLASKAPP.web.tool/flaskapp_venv
    WSGIScriptAlias / /var/www/html/FLASKAPP.web.tool/app.wsgi

    <Directory /var/www/html/FLASKAPP.web.tool>
        WSGIProcessGroup flaskapp
        WSGIApplicationGroup %{GLOBAL}
        Require all granted
    </Directory>

    # 设置WSGI专属超时(短于Apache全局Timeout)
    WSGIRequestTimeout 300
    ProxyTimeout 300
</VirtualHost>

注意:python-home需指向虚拟环境根目录,而非bin目录;WSGIApplicationGroup %{GLOBAL}可避免部分Flask扩展因子解释器问题导致阻塞。

5. 确认文件权限与SELinux(若启用)

确保Apache进程拥有应用目录的完整访问权限:

sudo chown -R www-data:www-data /var/www/html/FLASKAPP.web.tool
sudo chmod -R 755 /var/www/html/FLASKAPP.web.tool

若虚拟机启用了SELinux,需添加访问规则:

sudo setsebool -P httpd_can_network_connect on
sudo chcon -Rt httpd_sys_content_t /var/www/html/FLASKAPP.web.tool

6. 查看详细日志定位阻塞点

在main.py中添加Flask日志配置,捕获应用启动时的错误:

import logging
from logging.handlers import RotatingFileHandler

# 配置日志文件
handler = RotatingFileHandler('/var/log/flaskapp.log', maxBytes=10000, backupCount=3)
handler.setLevel(logging.INFO)
app.logger.addHandler(handler)

创建日志文件并设置权限:

sudo touch /var/log/flaskapp.log
sudo chown www-data:www-data /var/log/flaskapp.log

重启Apache后,访问页面,查看/var/log/flaskapp.log和/var/log/apache2/error.log的详细输出,定位具体阻塞原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:26:59