尝试使用mod_wsgi设置烧瓶

Wil*_*eer 5 python apache mod-wsgi flask

我正在尝试设置烧瓶,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
Run Code Online (Sandbox Code Playgroud)

test是烧瓶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>
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

这是我的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)
Run Code Online (Sandbox Code Playgroud)

运行python myapp.wsgi正常

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

Ewa*_*wan 3

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

\n
chmod 755 /home/ec2-user/myapp/\n
Run Code Online (Sandbox Code Playgroud)\n

你也可以:

\n
cd /home/ec2-user/\nls -la \n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

来自WSGIDaemonProcess 文档

\n
\n

用户=姓名 | 用户=#uid.rst

\n

定义运行守护程序进程时应使用的用户的 UNIX 用户名或数字用户 uid。如果未提供此选项,则守护进程将以 Apache 运行子进程的相同用户身份运行,并由 User 指令定义。

\n

请注意,如果 Apache 不是以 root 用户身份启动的,则此选项将被忽略,在这种情况下,无论设置如何,守护进程都会以 Apache 启动时的用户身份运行。

\n
\n

如果您正在运行您的用户,则apache它将不会以用户身份运行ec2-user,并且该apache用户必须有权访问所有子目录和包含的文件夹/home/ec2-user/

\n

您可以移动到/var/www/,chown到用户apache并从那里运行,这样您就不必移动ec2-user主目录的权限。

\n