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

如何解决Flask应用通过Apache+mod_wsgi部署后404错误?

解决mod_wsgi + Apache部署Flask应用的404问题

一、修正main.py代码

你的main.py中保留了Flask开发服务器启动代码,这会与mod_wsgi运行模式冲突,必须移除:

from app import create_app

application = create_app()

# 移除该行:application.run(debug=True)

二、修正Apache虚拟主机配置(website.conf)

替换原有配置为以下内容,解决路由关联、权限和Python路径问题:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin email@email.com

    # 绑定WSGI脚本入口
    WSGIScriptAlias / /var/www/appDirectory/app/api/main.py
    # 定义独立daemon进程,添加项目根目录到Python路径
    WSGIDaemonProcess flask-app python-path=/var/www/appDirectory:/var/www/appDirectory/venv/lib/python3.10/site-packages user=www-data group=www-data
    # 指定使用上述daemon进程处理请求
    WSGIProcessGroup flask-app

    # 配置项目目录权限(指向目录而非文件)
    <Directory /var/www/appDirectory/app/api>
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

关键修正点:

  • 给WSGIDaemonProcess命名并通过WSGIProcessGroup关联,确保请求使用虚拟环境的Python解释器
  • python-path添加项目根目录,让mod_wsgi能找到app模块
  • Directory配置指向目录而非文件,权限规则生效
  • 移除多余的Alias /api配置,避免干扰Flask路由

三、修复mod_wsgi模块冲突

你同时安装了系统包libapache2-mod-wsgi-py3和虚拟环境内的mod_wsgi,会导致模块冲突:

  1. 禁用系统版本mod_wsgi:
sudo a2dismod wsgi
  1. 确保/etc/apache2/mods-enabled/wsgi.load仅保留虚拟环境的mod_wsgi配置:
LoadModule wsgi_module "/home/user/appDirectory/venv/lib/python3.10/site-packages/mod_wsgi/server/mod_wsgi-py310.cpython-310-x86_64-linux-gnu.so"
WSGIPythonHome "/home/user/appDirectory/venv"

四、重启Apache服务

sudo systemctl restart apache2

完成以上步骤后,重新访问example.com/endpoint即可正常响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:25:15