【问题标题】:Trying to set up flask with mod_wsgi尝试使用 mod_wsgi 设置烧瓶
【发布时间】:2014-03-07 21:07:00
【问题描述】:

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

测试是烧瓶应用程序中的有效路线。
这是我在/etc/httpd/conf.d 文件夹中的myapp.conf 文件

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.26python 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 工作正常

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

【问题讨论】:

    标签: python apache flask mod-wsgi


    【解决方案1】:

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

    chmod 755 /home/ec2-user/myapp/
    

    您还可以:

    cd /home/ec2-user/
    ls -la 
    

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

    来自WSGIDaemonProcess docs

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

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

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

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

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

    【讨论】:

    • 出于沮丧,我递归地对整个文件夹进行了 777 处理。正如您在我的帖子中看到的,我的 error_log 中出现了 13PermissionDenied,我只是不知道要更改哪个文件夹
    • @WillemD'haeseleer - 您从哪个用户运行apacheroot?
    • 我以 apache 用户身份运行,但我不完全确定,它也可能是 apache 作为 root 用户,仍在寻找
    • 我以 apache 身份运行,我尝试将其更改为 root。它现在告诉我我必须重建服务器,这听起来不像是我真正想做的事情。
    • @WillemD'haeseleer - 在这种情况下,WSGIDaemon 将不会在指定的ec2-user 用户下运行。请查看我的更新答案。
    【解决方案2】:

    mod_wsgi 邮件列表中也有人问过这个问题。请参阅邮件列表上的讨论。后续将在邮件列表中。

    【讨论】:

    • 嗨,格雷厄姆,也感谢您的回复。您在邮件列表中的回答也有助于理解问题。
    【解决方案3】:

    我一直被困在这个问题上,找不到任何有用的解释。我什至尝试给 apache 一个临时 shell 来测试文件权限,但仍然一无所获。我终于找到了一个解决方案,documented here

    简而言之:如果 SELinux 配置为禁止访问相关目录/文件,也会产生此错误。检查您的 audit.log 并在必要时更改文件的安全上下文。

    chcon  --user system_u --type httpd_sys_content_t -Rv /home/ec2-user/myapp/
    

    对此可能产生的任何安全风险不提供任何明示或暗示的保证。我使用 gcloud/CentOS7 默认配置遇到了它,但我不知道这是特定于平台还是发行版。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2014-03-03
      • 1970-01-01
      • 2020-04-02
      • 2012-08-03
      • 1970-01-01
      • 2018-10-07
      • 2014-05-23
      • 1970-01-01
      • 2017-06-27
      相关资源
      最近更新 更多