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

Apache服务器显示index.html而非Flask端点的问题求助

Flask应用在Apache下无法替换静态index.html的问题

环境配置

Apache主配置文件 /etc/apache2/sites-available/propman.domain.com.conf

WSGIApplicationGroup %{GLOBAL}
WSGIDaemonProcess propman_proc python-home=/var/www/propman/.venv processes=1 threads=1
WSGIProcessGroup propman_proc

<VirtualHost *:80>
    Include /etc/apache2/sites-available/propman.domain.com.common
</VirtualHost>

<VirtualHost *:443>
    Include /etc/apache2/sites-available/propman.domain.com.common
    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/domain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/domain.com/privkey.pem
</VirtualHost>

Apache公共配置文件 /etc/apache2/sites-available/propman.domain.common

LogLevel debug
ServerName propman.domain.com
ServerAlias www.propman.domain.com
DocumentRoot /var/www/propman

WSGIScriptAlias /propman /var/www/propman/test1.wsgi

ErrorLog ${APACHE_LOG_DIR}/propman_error.log
CustomLog ${APACHE_LOG_DIR}/propman_access.log combined

Flask应用文件 /var/www/propman/test1.py

from flask import Flask
app = Flask(__name__)

@app.route("/propman")
def hello():
    return "Hello world again!"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=80, debug=True)

WSGI入口文件 /var/www/propman/test1.wsgi

import logging
import sys

logging.basicConfig(level=logging.DEBUG)
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, '/var/www/propman/')
from test1 import app as application

当前问题

访问http://propman.domain.com时,页面显示index.html内容而非Flask端点返回结果。关闭Apache后,直接在虚拟环境运行Flask脚本,访问domain.com/propman可正常显示内容。错误日志无警告或错误。

已尝试调整:

  • 修改WSGIScriptAlias为/propman或/
  • 修改Flask路由为/propman或/
    调整后日志无异常,但问题依旧。

解决方案

1. 阻止Apache优先返回静态索引文件

Apache默认通过DirectoryIndex指令优先返回指定静态文件(如index.html),会覆盖WSGIScriptAlias的匹配规则。在propman.domain.com.common配置文件中添加:

# 禁用默认静态索引文件,强制所有请求走WSGI脚本
DirectoryIndex disabled

2. 确保WSGI配置与路由匹配

如果要让根路径/指向Flask应用,需同步调整两处配置:

  • Apache侧配置正确的WSGIScriptAlias:
    WSGIScriptAlias / /var/www/propman/test1.wsgi
    
  • Flask侧匹配根路径路由:
    @app.route("/")
    def hello():
        return "Hello world again!"
    

3. 验证配置加载与文件权限

  • 重启Apache使配置生效:
    sudo systemctl restart apache2
    
  • 确保Apache运行用户(默认www-data)拥有应用文件的读取权限:
    sudo chown -R www-data:www-data /var/www/propman
    sudo chmod -R 755 /var/www/propman
    

4. 排查请求流向

查看访问日志/var/log/apache2/propman_access.log:

  • 如果日志显示请求/index.html,说明Apache仍在优先返回静态文件,需检查DirectoryIndex配置是否生效;
  • 如果日志显示请求/但无Flask响应,确认mod_wsgi模块已加载:
    sudo a2enmod wsgi
    sudo systemctl restart apache2
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:25:17