【问题标题】:mod_wsgi unable to connect WSGI daemon processmod_wsgi 无法连接 WSGI 守护进程
【发布时间】:2017-01-13 18:26:36
【问题描述】:

我正在使用 Easy apache 4、mod_wsgi 和 Python 3.5。当我在服务器中调用 Django 项目时,出现以下错误:

(13)Permission denied: mod_wsgi (pid=24223): Unable to connect to WSGI daemon
process 'user123' on '/var/run/wsgi.8442.6.7.sock' as user with uid=3708.

【问题讨论】:

    标签: django cpanel mod-wsgi


    【解决方案1】:

    您的 Apache 安装可能设置为使用 SECURE 权限模式运行。这意味着 Apache 子工作进程在处理请求之前被分叉并且特权被删除,在这种情况下,它只是试图将请求代理到 mod_wsgi 守护进程。这样做的结果是它无法连接到守护进程的套接字,因为在删除权限之前它已设置所有权以匹配原始 Apache 子工作进程。

    这很明显,因为错误消息的uid 在普通用户的范围内,而不是特殊的apachenobody 用户。

    要修复它,需要修改WSGIDaemonProcess指令配置并添加选项:

    socket-user=#3708
    

    或:

    socket-user=username
    

    其中username 被替换为uid3708 的用户的实际名称。

    由于最近对 Apache 的 CPanel 配置进行了更改,因此似乎需要添加此选项。

    【讨论】:

    • 如果运行 service apache2 reload,我会收到此错误,uid=33 (www-data),但如果运行 service apache2 restart,则不会。这表明有什么不好还是可以?
    【解决方案2】:

    有时 socket-user 设置不起作用。 这可能是因为 WSGISocketPrefix 找不到路径

    • 如果是VPS:

      WSGISocketPrefix /var/run/wsgi

    • 如果您在共享主机中:

      WSGISocketPrefix ../../var/run/wsgi

    谢谢

    【讨论】:

    • 根据您在别处的答案的评论,为什么是相对路径。这是你可能需要解释的魔法。
    • 路径/var/run/user123 无权访问该文件夹。只有 root 和批准的用户有。所以我们需要显示一个wsgi socket的路径。 @GrahamDumpleton 先生,我需要解释更多吗?如果不是,我会的
    • 您提出的解决方案实际上并没有帮助解决问题所在。当使用SECURE 特权模式时,唯一的解决方案是socket-user 选项。您的答案是处理一个单独的问题,即 Apache 用户无法访问某些 Linux 发行版上的默认运行时目录。这个单独的问题在 modwsgi.readthedocs.io/en/develop/user-guides/… 的 mod_wsgi 文档中进行了描述
    • 是的@GrahamDumpleton 谢谢你的澄清。下次我会记住这两个。实际上我也试图以另一种方式添加答案。你是对的
    猜你喜欢
    • 2016-10-14
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    相关资源
    最近更新 更多