Apache部署Flask应用时如何访问外部Templates目录?
解决Apache部署Flask时无法访问外部Templates目录的问题
补全路径权限(不止模板目录本身)
Apache运行用户(通常是apache或www-data)需要能遍历到/data/templates的完整路径,别只给模板目录加权限:# 给父目录/data添加遍历权限(执行权限x) chmod o+x /data # 给模板目录及子文件添加读权限 chmod -R o+r /data/templates # 或者更稳妥的方式:将目录组设为apache并开放组读权限 chown -R :apache /data/templates chmod -R g+r /data/templates同时确认
myapp.py里的模板路径是绝对路径,避免相对路径在Apache环境下解析错误:app = Flask(__name__, template_folder='/data/templates')处理SELinux限制(最容易忽略的点)
SELinux默认会阻止Apache访问非网站默认目录(比如/data这类不在/var/www下的路径):- 先临时关闭测试:
重启Apache后如果恢复正常,就确定是SELinux的问题。setenforce 0 - 永久配置允许Apache访问该目录:
这条命令会给模板目录打上Apache可访问的SELinux标签。semanage fcontext -a -t httpd_sys_content_t "/data/templates(/.*)?" restorecon -Rv /data/templates
- 先临时关闭测试:
添加Apache目录访问许可
在你的myapp.conf配置文件里,新增对外部模板目录的访问规则:<Directory /data/templates> Require all granted AllowOverride None </Directory>保存后重启Apache:
systemctl restart httpd确认WSGI进程的运行身份
检查WSGI是否以Apache用户身份运行:ps aux | grep httpd如果进程身份不对,在
myapp.conf里明确指定:WSGIDaemonProcess myapp user=apache group=apache threads=5 WSGIScriptAlias / /var/www/myapp/myapp.wsgi <Directory /var/www/myapp> WSGIProcessGroup myapp WSGIApplicationGroup %{GLOBAL} Require all granted </Directory>
内容的提问来源于stack exchange,提问作者WalrusJuggler545
相关产品推荐
相关产品推荐

