没有这样的文件或目录:mod_wsgi:无法连接到“/var/run/apache2/wsgi.30303.0.1.sock”上的 WSGI 守护进程 'web2py'

No such file or directory: mod_wsgi : Unable to connect to WSGI daemon process 'web2py' on '/var/run/apache2/wsgi.30303.0.1.sock'

Web 应用程序部署在 EC2 上,并且每天随机遇到一次或两次以下错误,导致 Web 应用程序在一段时间内无法访问。一段时间后会自动更正。

(2)No such file or directory: [client xxx.xx.xx.xxx:xxxxx] mod_wsgi (pid=xxxxx): Unable to connect to WSGI daemon process 'web2py' on '/var/run/apache2/wsgi.30303.0.1.sock'.

应用程序堆栈 web2py mod_wsgi 阿帕奇2

错误前每次的日志都不一样:

[Thu Sep 28 06:25:01.528334 2017] [mpm_event:notice] [pid 30303:tid 140438078609280] AH00493: SIGUSR1 received.  Doing graceful restart
[Thu Sep 28 06:25:02.318551 2017] [ssl:warn] [pid 30303:tid 140438078609280] AH01906: ip-172-31-0-91.eu-west-1.compute.internal:443:0 server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Thu Sep 28 06:25:02.318574 2017] [ssl:warn] [pid 30303:tid 140438078609280] AH01909: ip-172-31-0-91.eu-west-1.compute.internal:443:0 server certificate does NOT include an ID which matches the server name
[Thu Sep 28 06:25:02.318664 2017] [wsgi:warn] [pid 30303:tid 140438078609280] mod_wsgi: Compiled for Python/2.7.11.
[Thu Sep 28 06:25:02.318669 2017] [wsgi:warn] [pid 30303:tid 140438078609280] mod_wsgi: Runtime using Python/2.7.12.
[Thu Sep 28 06:25:02.319205 2017] [mpm_event:notice] [pid 30303:tid 140438078609280] AH00489: Apache/2.4.18 (Ubuntu) OpenSSL/1.0.2g mod_wsgi/4.3.0 Python/2.7.12 configured -- resuming normal operations
[Thu Sep 28 06:25:02.319225 2017] [core:notice] [pid 30303:tid 140438078609280] AH00094: Command line: '/usr/sbin/apache2'
[Thu Sep 28 06:25:09.327495 2017] [mpm_event:error] [pid 30303:tid 140438078609280] AH00485: scoreboard is full, not at MaxRequestWorkers
[Thu Sep 28 06:28:39.560285 2017] [mpm_event:error] [pid 30303:tid 140438078609280] AH00485: scoreboard is full, not at MaxRequestWorkers
[Thu Sep 28 06:45:27.583870 2017] [wsgi:error] [pid 30307:tid 140437629064960] (2)No such file or directory: [client 172.31.32.163:24210] mod_wsgi (pid=30307): Unable to connect to WSGI daemon process 'web2py' on '/var/run/apache2/wsgi.30303.0.1.sock'.
[Thu Sep 28 06:49:14.503732 2017] [wsgi:error] [pid 30307:tid 140437603886848] (2)No such file or directory: [client 172.31.14.173:37726] mod_wsgi (pid=30307): Unable to connect to WSGI daemon process 'web2py' on '/var/run/apache2/wsgi.30303.0.1.sock'.

如果需要更多信息,请告诉我。

这是由于在 HTTP 客户端使用保活连接并通过同一连接发出多个请求时正常重启 Apache 造成的。

问题是 Apache 管理 mod_wsgi 守护进程的方式意味着它们会立即关闭,即使是正常重启也是如此。与此同时,最初接受请求并代理到 mod_wsgi 守护进程的 Apache 子工作进程将保持 运行 直到所有客户端连接断开。这意味着当保持活动连接并且通过同一客户端连接的后续请求需要转到 WSGI 应用程序时,它将失败,因为 mod_wsgi 守护进程的先前化身现在已经消失。

在这种情况下,不能允许旧的 Apache 子工作进程连接到新的 mod_wsgi 守护进程,因为重新启动的原因可能是配置更改并允许旧的子工作进程连接对于守护进程的新实例,如果在新配置下不允许以这种方式处理请求,则可能会引入安全问题。

请接受这是一种罕见的情况,出现安全问题的可能性很小。考虑 mod_wsgi 的新选项可能是合理的,即在这种情况下连接到较新的守护进程是可以的,并且在任何重新启动时都不会轮换守护进程的侦听器套接字。

这种情况的发生一直为人所知(10 年),但是在 GitHub 上针对 mod_wsgi 创建了一个问题来考虑这样的选择。