mod_wsgi 无法连接 WSGI 守护进程
Posted
技术标签:
【中文标题】mod_wsgi 无法连接 WSGI 守护进程【英文标题】:mod_wsgi unable to connect WSGI daemon process 【发布时间】: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.
【问题讨论】:
【参考方案1】:您的 Apache 安装可能设置为使用 SECURE
权限模式运行。这意味着 Apache 子工作进程在处理请求之前被分叉并且特权被删除,在这种情况下,它只是试图将请求代理到 mod_wsgi 守护进程。这样做的结果是它无法连接到守护进程的套接字,因为在删除权限之前它已设置所有权以匹配原始 Apache 子工作进程。
这很明显,因为错误消息的uid
在普通用户的范围内,而不是特殊的apache
或nobody
用户。
要修复它,需要修改WSGIDaemonProcess
指令配置并添加选项:
socket-user=#3708
或:
socket-user=username
其中username
被替换为uid
的3708
的用户的实际名称。
由于最近对 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 谢谢你的澄清。下次我会记住这两个。实际上我也试图以另一种方式添加答案。你是对的以上是关于mod_wsgi 无法连接 WSGI 守护进程的主要内容,如果未能解决你的问题,请参考以下文章
Django + mod_wsgi + apache2 - 子进程 XXX 仍然没有退出,发送一个 SIGTERM
我可以让一些代码像守护进程一样在 Django 中不断运行吗