CentOS7下Apache2.4+WSGI部署Flask/Dash应用遇403 Forbidden问题排查
问题排查与解决方案
核心问题分析
错误日志AH01276指向两个表面现象:
- 服务器在
/var/www/Typesetter/appname/目录下找不到配置的默认索引文件(index.html/index.php) - 当前配置禁止自动生成目录索引
但本质是WSGI虚拟主机未正确将子目录/appname映射到Dash应用的WSGI入口,导致Apache试图直接访问目录而非转发请求给WSGI应用。
分步排查与修复
1. 修正软链接与目录权限
- 确保软链接
/var/www/Typesetter/appname指向的/var/www/html/appname目录及所有父目录对Apache进程(用户apache)有执行权限(755足够,777不安全):chown -R apache:apache /var/www/html/appname chmod -R 755 /var/www/html/appname - 在
appname.conf中添加软链接跟随配置:<Directory "/var/www/Typesetter/appname"> Options FollowSymLinks AllowOverride None Require all granted </Directory>
2. 修正WSGI虚拟主机配置
确保/etc/httpd/conf.d/appname.conf正确将子目录/appname映射到WSGI脚本,示例配置:
<VirtualHost *:443> ServerName our-group.our-uni.com # 保留原有SSL配置 # 挂载WSGI应用到/appname子目录 WSGIScriptAlias /appname /var/www/html/appname/testapp.wsgi # 配置WSGI应用目录权限 <Directory "/var/www/html/appname"> Options FollowSymLinks ExecCGI AllowOverride None Require all granted WSGIApplicationGroup %{GLOBAL} </Directory> # Dash静态资源映射(必须配置,否则前端加载失败) Alias /appname/static /var/www/html/appname/static <Directory "/var/www/html/appname/static"> Require all granted </Directory> </VirtualHost>
关键要点:
WSGIScriptAlias必须明确将/appname指向你的testapp.wsgi文件- 必须添加静态资源的
Alias映射,否则Dash的前端组件无法加载 WSGIApplicationGroup %{GLOBAL}解决CentOS7下mod_wsgi嵌入式模式可能引发的Python线程冲突
3. 检查testapp.wsgi文件
确保testapp.wsgi正确导入Dash应用,示例内容:
import sys sys.path.insert(0, '/var/www/html/appname') from testapp import app as application
注意:testapp.py中的Dash应用实例必须命名为app,或者修改wsgi文件中的导入名称匹配。
4. 验证配置并重启Apache
- 检查配置语法是否正确:
httpd -t - 重启Apache服务:
systemctl restart httpd
额外检查点
- 确认
mod_wsgi与运行Dash的Python版本兼容:import mod_wsgi print(mod_wsgi.version) - 修复SELinux上下文(CentOS7默认开启SELinux):
restorecon -Rv /var/www/html/appname
内容的提问来源于stack exchange,提问作者karel
相关产品推荐
相关产品推荐

