为什么mod_wsgi的apache超时?

时间:2017-09-30 01:45:08

标签: python django apache mod-wsgi

我正在使用带有mod_wsgi的apache来部署我的django项目。我做的是:

  1. python manage.py startproject mysite作为django教程指南,
  2. 在apache conf / httpd.conf中添加以下配置:

    ServerName www.example.com
    ServerAlias example.com
    ServerAdmin webmaster@example.com
    
    WSGIDaemonProcess example.com processes=2 threads=15 display-name=%{GROUP} python-path=/root/mysite python-home=/usr
    WSGIProcessGroup example.com
    
    WSGIScriptAlias / /root/mysite/mysite/wsgi.py
    
    <Directory /root/mysite/mysite>
    Require all granted
    </Directory>
    

  3. 在地址栏中键入example.com,然后获得超时响应:

    网关超时

    网关未收到上游服务器或应用程序的及时响应。

  4. 如果只是一个玩具django应用程序如何处理这个超时?我认为这与性能问题无关,但可能是由于一些配置错误造成的。有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您不需要:

python-home=/usr

因为你正在使用系统Python。如果使用Python虚拟环境,则只需要这样做。

现在添加:

WSGIApplicationGroup %{GLOBAL}

并查看是否有任何改变。如果这是一个全新的Django项目,它应该不会,但如果你已经改变它并导入某些在Python子解释器中不起作用的Python包,你将需要它。

同时检查Apache错误日志,因为它会为您提供更准确的超时原因。

更新1

如果您自己编译mod_wsgi并希望它使用/usr/local/python3进行Python安装,则需要添加:

WSGIPythonHome /usr/local/python3

LoadModule的{​​{1}}行之后。如果您还为3.6版本安装了系统Python,那么这一点非常重要。

您还需要检查它是否正在选择正确的共享库。使用wsgi_module,如下所述:

查看它正在拾取的Python共享库以及是否在ldd下找到它。如果它从/usr/local/python3/lib中选择一个会导致问题的那个。