我正在尝试使用mod_wsgi
设置烧瓶,但我一直收到错误
(13)Permission denied: access to / denied (filesystem path '/home/ec2-user/myapp') because search permissions are missing on a component of the path
测试是烧瓶app中的有效路线
这是myapp.conf
文件夹
/etc/httpd/conf.d
文件
WSGIRestrictStdout Off
<VirtualHost *>
ServerName somewhere.compute-1.amazonaws.com
WSGIDaemonProcess flaskapp user=ec2-user group=ec2-user threads=5
WSGIScriptAlias / /home/ec2-user/myapp/myapp.wsgi
<Directory /home/ec2-user/myapp>
WSGIProcessGroup flaskapp
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
LogLevel notice
</VirtualHost>
这是Apache/2.2.26
python 2.6.8
我没有使用virtualenv。
当我启动apache时,我在error_log
中看到这个通知[Mon Feb 10 14:33:00 2014] [notice] Apache/2.2.26 (Unix) DAV/2 mod_wsgi/3.2 Python/2.6.8 configured -- resuming normal operations
这是我的myapp.wsgi
文件
from flask import Flask
application = Flask(__name__)
@application.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
application.run(host='0.0.0.0', port=80)
仅运行python myapp.wsgi
正常运行
错误似乎告诉我应该更改某些文件夹的某些权限,但我不知道是什么文件夹。
答案 0 :(得分:3)
您应该查看13PermissionDenied
的Apache文档,并确保为您的文件夹设置了正确的权限。
chmod 755 /home/ec2-user/myapp/
你也可以:
cd /home/ec2-user/
ls -la
将输出每个文件和所有者:文件夹的每个用户组的组和权限。寻找任何与众不同的东西。
user = name |用户#= uid.rst 强>
定义应运行守护程序进程的用户的UNIX用户名或数字用户uid。如果未提供此选项,则守护程序进程将作为Apache运行子进程的相同用户运行,并且由User指令定义。
请注意,如果Apache未以root用户身份启动,则会忽略此选项,在这种情况下,无论设置如何,守护程序进程都将以Apache启动的用户身份运行。
如果您以apache
身份运行用户,则该用户将无法以ec2-user
身份运行,而apache
用户必须有权访问所有子目录和包含文件夹/home/ec2-user/
您可以移至/var/www/
,将chown
移至用户apache
并从那里开始运行,这样您就不必移动ec2-user
主目录的权限。
答案 1 :(得分:1)
此问题也在mod_wsgi邮件列表中提出。请参阅邮件列表中的讨论。跟进将在邮件列表中。
答案 2 :(得分:0)
我永远陷入困境,无法找到任何有用的解释。我甚至尝试给apache一个临时shell来测试文件权限,但仍然无处可去。我终于遇到了一个解决方案,documented here。
简而言之:如果SELinux配置为禁止访问相关目录/文件,也会生成此错误。检查audit.log并在必要时更改文件的安全上下文。
chcon --user system_u --type httpd_sys_content_t -Rv /home/ec2-user/myapp/
对于可能产生的任何安全风险,不作任何明示或暗示的保证。我使用gcloud / CentOS7默认配置遇到了它,但我不知道该平台或发行版是否特定。
祝你好运!