为什么在虚拟环境和非特权用户下使用 apache2、mod_wsgi、django 的页面 hang/timeout
Why does page hang/timeout with apache2, mod_wsgi, django, in virtual environment and under non-privileged user
当我转到52.1.65.249时,页面挂起或超时。我有一个位于 /home/usrbkto/bkto/projbkto.
的非 root 用户下的 django 项目
我在两台服务器上遇到同样的问题 运行 ubuntu 14.04 和 python 2.7.8 和 ubuntu 15.04 和 python 2.7.9。我相信 PyPi 上的 mod_wsgi 是使用 python 2.7.8 编译的,所以对于服务器 运行 python 2.7.9 我从 Github 下载并使用编译我服务器上 python 的版本。在我一次更新我的包之前一切都工作正常,所以我不确定哪个包更新破坏了东西。我怀疑这与我没有正确使用 mod_wsgi 的新版本这一事实有关,但我不确定并且我想将我的 Django 项目保留在无法访问的非根用户下Apache 文件。
我在 /etc/apache2/sites-available/bkto.conf 的自定义 conf 文件是:
WSGIScriptAlias / /home/usrbkto/bkto/projbkto/projbkto/wsgi.py
WSGIPythonHome /home/usrbkto/vent
WSGIPythonPath /home/usrbkto/bkto/projbkto
LogLevel info
<Directory /home/usrbkto/bkto/projbkto/projbkto>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Alias /media/ /home/usrbkto/bkto/projbkto/media/
Alias /static/ /home/usrbkto/bkto/projbkto/static/
<Directory /home/usrbkto/bkto/projbkto/static>
Require all granted
</Directory>
<Directory /home/usrbkto/bkto/projbkto/media>
Require all granted
</Directory>
apache error.log 是:
[Mon Jun 01 05:14:41.082545 2015] [mpm_event:notice] [pid 32630:tid 140666831587200] AH00489: Apache/2.4.10 (Ubuntu) mod_wsgi/4.4.12 Python/2.7.9 configured -- resuming normal operations
[Mon Jun 01 05:14:41.082692 2015] [mpm_event:info] [pid 32630:tid 140666831587200] AH00490: Server built: Mar 9 2015 11:53:48
[Mon Jun 01 05:14:41.082713 2015] [core:notice] [pid 32630:tid 140666831587200] AH00094: Command line: '/usr/sbin/apache2'
[Mon Jun 01 05:14:41.083297 2015] [wsgi:info] [pid 32634:tid 140666831587200] mod_wsgi (pid=32634): Python home /home/usrbkto/venv.
[Mon Jun 01 05:14:41.083401 2015] [wsgi:info] [pid 32634:tid 140666831587200] mod_wsgi (pid=32634): Initializing Python.
[Mon Jun 01 05:14:41.089325 2015] [wsgi:info] [pid 32632:tid 140666831587200] mod_wsgi (pid=32632): Python home /home/usrbkto/venv.
[Mon Jun 01 05:14:41.089442 2015] [wsgi:info] [pid 32632:tid 140666831587200] mod_wsgi (pid=32632): Initializing Python.
[Mon Jun 01 05:14:41.181394 2015] [wsgi:info] [pid 32634:tid 140666831587200] mod_wsgi (pid=32634): Attach interpreter ''.
[Mon Jun 01 05:14:41.181479 2015] [wsgi:info] [pid 32634:tid 140666831587200] mod_wsgi (pid=32634): Adding '/home/usrbkto/bkto/projbkto' to path.
[Mon Jun 01 05:14:41.182781 2015] [wsgi:info] [pid 32634:tid 140666831587200] mod_wsgi (pid=32634): Imported 'mod_wsgi'.
[Mon Jun 01 05:14:41.186652 2015] [wsgi:info] [pid 32632:tid 140666831587200] mod_wsgi (pid=32632): Attach interpreter ''.
[Mon Jun 01 05:14:41.186718 2015] [wsgi:info] [pid 32632:tid 140666831587200] mod_wsgi (pid=32632): Adding '/home/usrbkto/bkto/projbkto' to path.
[Mon Jun 01 05:14:41.212429 2015] [wsgi:info] [pid 32632:tid 140666831587200] mod_wsgi (pid=32632): Imported 'mod_wsgi'.
[Mon Jun 01 05:14:47.101220 2015] [wsgi:info] [pid 32634:tid 140666698360576] mod_wsgi (pid=32634): Create interpreter 'ip-172-31-4-180.ec2.internal|'.
[Mon Jun 01 05:14:47.102574 2015] [wsgi:info] [pid 32634:tid 140666698360576] mod_wsgi (pid=32634): Adding '/home/usrbkto/bkto/projbkto' to path.
[Mon Jun 01 05:14:47.104087 2015] [wsgi:info] [pid 32634:tid 140666698360576] [client 64.94.31.206:47918] mod_wsgi (pid=32634, process='', application='ip-172-31-4-180.ec2.internal|'): Loading WSGI script '/home/usrbkto/bkto/projbkto/projbkto/wsgi.py'.
[Mon Jun 01 05:16:46.847615 2015] [wsgi:info] [pid 32632:tid 140666612999936] mod_wsgi (pid=32632): Create interpreter 'ip-172-31-4-180.ec2.internal|'.
[Mon Jun 01 05:16:46.848995 2015] [wsgi:info] [pid 32632:tid 140666612999936] mod_wsgi (pid=32632): Adding '/home/usrbkto/bkto/projbkto' to path.
[Mon Jun 01 05:16:46.850506 2015] [wsgi:info] [pid 32632:tid 140666612999936] [client 166.137.244.128:61084] mod_wsgi (pid=32632, process='', application='ip-172-31-4-180.ec2.internal|'): Loading WSGI script '/home/usrbkto/bkto/projbkto/projbkto/wsgi.py'.
位于 /home/usrbkto/bkto/projbkto/projbkto/wsgi.py 的 wsgi.py 文件是:
"""
WSGI config for projbkto project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/
"""
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "projbkto.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
PyPi 的 mod_wsgi 版本是源代码而非二进制文件。说 PyPi 上的 mod_wsgi 是使用某个 Python 版本编译的没有任何意义,因为它们是使用您拥有的任何 Python 版本在您自己的系统上编译的。
无论如何,请阅读本文并尝试给出的补救措施:
这是针对 Python 未正确编码以在子解释器中工作的 C 扩展引起的锁定的通常修复方法。
也停止使用嵌入式模式,转而使用守护程序模式:
如果这些没有帮助,请指出它是否易于重现或随机。
当我转到52.1.65.249时,页面挂起或超时。我有一个位于 /home/usrbkto/bkto/projbkto.
的非 root 用户下的 django 项目我在两台服务器上遇到同样的问题 运行 ubuntu 14.04 和 python 2.7.8 和 ubuntu 15.04 和 python 2.7.9。我相信 PyPi 上的 mod_wsgi 是使用 python 2.7.8 编译的,所以对于服务器 运行 python 2.7.9 我从 Github 下载并使用编译我服务器上 python 的版本。在我一次更新我的包之前一切都工作正常,所以我不确定哪个包更新破坏了东西。我怀疑这与我没有正确使用 mod_wsgi 的新版本这一事实有关,但我不确定并且我想将我的 Django 项目保留在无法访问的非根用户下Apache 文件。
我在 /etc/apache2/sites-available/bkto.conf 的自定义 conf 文件是:
WSGIScriptAlias / /home/usrbkto/bkto/projbkto/projbkto/wsgi.py
WSGIPythonHome /home/usrbkto/vent
WSGIPythonPath /home/usrbkto/bkto/projbkto
LogLevel info
<Directory /home/usrbkto/bkto/projbkto/projbkto>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Alias /media/ /home/usrbkto/bkto/projbkto/media/
Alias /static/ /home/usrbkto/bkto/projbkto/static/
<Directory /home/usrbkto/bkto/projbkto/static>
Require all granted
</Directory>
<Directory /home/usrbkto/bkto/projbkto/media>
Require all granted
</Directory>
apache error.log 是:
[Mon Jun 01 05:14:41.082545 2015] [mpm_event:notice] [pid 32630:tid 140666831587200] AH00489: Apache/2.4.10 (Ubuntu) mod_wsgi/4.4.12 Python/2.7.9 configured -- resuming normal operations
[Mon Jun 01 05:14:41.082692 2015] [mpm_event:info] [pid 32630:tid 140666831587200] AH00490: Server built: Mar 9 2015 11:53:48
[Mon Jun 01 05:14:41.082713 2015] [core:notice] [pid 32630:tid 140666831587200] AH00094: Command line: '/usr/sbin/apache2'
[Mon Jun 01 05:14:41.083297 2015] [wsgi:info] [pid 32634:tid 140666831587200] mod_wsgi (pid=32634): Python home /home/usrbkto/venv.
[Mon Jun 01 05:14:41.083401 2015] [wsgi:info] [pid 32634:tid 140666831587200] mod_wsgi (pid=32634): Initializing Python.
[Mon Jun 01 05:14:41.089325 2015] [wsgi:info] [pid 32632:tid 140666831587200] mod_wsgi (pid=32632): Python home /home/usrbkto/venv.
[Mon Jun 01 05:14:41.089442 2015] [wsgi:info] [pid 32632:tid 140666831587200] mod_wsgi (pid=32632): Initializing Python.
[Mon Jun 01 05:14:41.181394 2015] [wsgi:info] [pid 32634:tid 140666831587200] mod_wsgi (pid=32634): Attach interpreter ''.
[Mon Jun 01 05:14:41.181479 2015] [wsgi:info] [pid 32634:tid 140666831587200] mod_wsgi (pid=32634): Adding '/home/usrbkto/bkto/projbkto' to path.
[Mon Jun 01 05:14:41.182781 2015] [wsgi:info] [pid 32634:tid 140666831587200] mod_wsgi (pid=32634): Imported 'mod_wsgi'.
[Mon Jun 01 05:14:41.186652 2015] [wsgi:info] [pid 32632:tid 140666831587200] mod_wsgi (pid=32632): Attach interpreter ''.
[Mon Jun 01 05:14:41.186718 2015] [wsgi:info] [pid 32632:tid 140666831587200] mod_wsgi (pid=32632): Adding '/home/usrbkto/bkto/projbkto' to path.
[Mon Jun 01 05:14:41.212429 2015] [wsgi:info] [pid 32632:tid 140666831587200] mod_wsgi (pid=32632): Imported 'mod_wsgi'.
[Mon Jun 01 05:14:47.101220 2015] [wsgi:info] [pid 32634:tid 140666698360576] mod_wsgi (pid=32634): Create interpreter 'ip-172-31-4-180.ec2.internal|'.
[Mon Jun 01 05:14:47.102574 2015] [wsgi:info] [pid 32634:tid 140666698360576] mod_wsgi (pid=32634): Adding '/home/usrbkto/bkto/projbkto' to path.
[Mon Jun 01 05:14:47.104087 2015] [wsgi:info] [pid 32634:tid 140666698360576] [client 64.94.31.206:47918] mod_wsgi (pid=32634, process='', application='ip-172-31-4-180.ec2.internal|'): Loading WSGI script '/home/usrbkto/bkto/projbkto/projbkto/wsgi.py'.
[Mon Jun 01 05:16:46.847615 2015] [wsgi:info] [pid 32632:tid 140666612999936] mod_wsgi (pid=32632): Create interpreter 'ip-172-31-4-180.ec2.internal|'.
[Mon Jun 01 05:16:46.848995 2015] [wsgi:info] [pid 32632:tid 140666612999936] mod_wsgi (pid=32632): Adding '/home/usrbkto/bkto/projbkto' to path.
[Mon Jun 01 05:16:46.850506 2015] [wsgi:info] [pid 32632:tid 140666612999936] [client 166.137.244.128:61084] mod_wsgi (pid=32632, process='', application='ip-172-31-4-180.ec2.internal|'): Loading WSGI script '/home/usrbkto/bkto/projbkto/projbkto/wsgi.py'.
位于 /home/usrbkto/bkto/projbkto/projbkto/wsgi.py 的 wsgi.py 文件是:
"""
WSGI config for projbkto project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/
"""
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "projbkto.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
PyPi 的 mod_wsgi 版本是源代码而非二进制文件。说 PyPi 上的 mod_wsgi 是使用某个 Python 版本编译的没有任何意义,因为它们是使用您拥有的任何 Python 版本在您自己的系统上编译的。
无论如何,请阅读本文并尝试给出的补救措施:
这是针对 Python 未正确编码以在子解释器中工作的 C 扩展引起的锁定的通常修复方法。
也停止使用嵌入式模式,转而使用守护程序模式:
如果这些没有帮助,请指出它是否易于重现或随机。