部署Flask应用至Ubuntu服务器时无法跳转至__init__.py问题求助
解决Flask部署后显示Apache默认页的问题
我看你这情况大概率是自定义虚拟主机没生效或者Apache权限/配置不兼容导致的,咱们一步步来排查修复:
1. 先处理Apache站点优先级问题
Apache默认的000-default.conf站点如果还在启用,会优先于你的cwh.conf生效,所以先禁用默认站点,启用你的自定义站点:
# 禁用默认站点 sudo a2dissite 000-default.conf # 启用你的cwh站点 sudo a2ensite cwh.conf # 重启Apache服务 sudo systemctl restart apache2
2. 修复Apache 2.4的权限指令
你的cwh.conf里用的是旧版Apache(2.2及以前)的权限语法,而Ubuntu现在的Apache基本都是2.4版本,需要替换成新的指令:
把配置里的这两段:
<Directory /var/www/cwh/cwh/> Order allow,deny Allow from all </Directory> <Directory /var/www/cwh/cwh/static/> Order allow,deny Allow from all </Directory>
改成:
<Directory /var/www/cwh/cwh/> Require all granted </Directory> <Directory /var/www/cwh/cwh/static/> Require all granted </Directory>
改完后记得重启Apache。
3. 让WSGI加载你的虚拟环境
你的cwh.wsgi文件里没有激活虚拟环境,Apache会用系统默认的Python环境,而这个环境里很可能没有安装Flask,导致WSGI加载失败,进而 fallback到默认页。修改你的cwh.wsgi,添加虚拟环境激活代码:
#!/usr/bin/python3 import sys import logging logging.basicConfig(stream=sys.stderr) sys.path.insert(0,"/var/www/cwh/") # 激活虚拟环境(路径要对应你的venv位置) activate_this = '/var/www/cwh/cwh/venv/bin/activate_this.py' with open(activate_this) as file_: exec(file_.read(), dict(__file__=activate_this)) from cwh import app as application application.secret_key = 'Add-secret'
4. 确保安装了Python3版本的mod_wsgi
如果你的系统里装的是Python2版本的mod_wsgi,也会导致加载Python3的Flask环境失败,执行以下命令安装对应版本:
sudo apt-get update sudo apt-get install libapache2-mod-wsgi-py3 # 安装完重启Apache sudo systemctl restart apache2
5. 查看错误日志排查细节
如果还是不行,一定要看Apache的错误日志,这里能找到最直接的问题:
sudo tail -f /var/log/apache2/error.log
比如日志里如果出现ImportError: No module named flask,就说明虚拟环境没激活或者mod_wsgi版本不对;如果出现权限相关的错误,就检查目录权限:
# 给Apache用户(www-data)赋予项目目录的权限 sudo chown -R www-data:www-data /var/www/cwh
按照上面的步骤走一遍,应该就能解决默认页的问题,正常显示你的Flask内容了。
内容的提问来源于stack exchange,提问作者Zeeshan Ali
相关产品推荐
相关产品推荐

