尝试使用mod_wsgi设置烧瓶

时间:2014-02-10 13:41:20

标签: python apache flask mod-wsgi

我正在尝试使用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正常运行

错误似乎告诉我应该更改某些文件夹的某些权限,但我不知道是什么文件夹。

3 个答案:

答案 0 :(得分:3)

您应该查看13PermissionDenied的Apache文档,并确保为您的文件夹设置了正确的权限。

chmod 755 /home/ec2-user/myapp/

你也可以:

cd /home/ec2-user/
ls -la 

将输出每个文件和所有者:文件夹的每个用户组的组和权限。寻找任何与众不同的东西。

来自WSGIDaemonProcess docs

  

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默认配置遇到了它,但我不知道该平台或发行版是否特定。

祝你好运!