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
相关产品推荐
相关产品推荐

