尝试在守护进程模式下使用mod_wsgi显示默认的apache"它可以工作!"页面而不是应用程序

时间:2012-05-08 02:20:18

标签: python apache mod-wsgi bottle

我有一个Python WSGI应用程序,我已经编写并在嵌入模式下使用apache2 + mod_wsgi运行,我试图让它以守护进程模式运行。

问题是,使用配置(下面),而不是看到应用程序,我看到默认的Apache2“它的工作原理!”尽管它表达了其运作状态的热情,但这个页面是错误的。

我只清理了appname和urls等,所以你看到了我正在使用的整个apache conf。

<VirtualHost *:80>
  ServerName app.example.com
  ServerAlias app

  WSGIDaemonProcess appname user=www-data group=www-data processes=5 threads=5 display-name=%{GROUP} maximum-requests=1000
  WSGIScriptAlias / /usr/share/app/app/application.wsgi

  Alias /static /usr/share/app/app/static

  ErrorLog /var/log/apache2/app/error.log
  CustomLog /var/log/apache2/app/access.log common

<Directory /usr/share/app/app>
    WSGIProcessGroup appname
    Order allow,deny
    Allow from All
</Directory>

<Directory /usr/share/app/app/static>
    Order allow,deny
    Allow from All
</Directory>
</VirtualHost>

无论我是将WSGIProcessGroup选项放在该部分中,还是只放在主要部分中,这仍然只显示“它有效!”页。

该应用程序正在使用瓶子和toscawidgets,使用wsgi验证器确保它的行为都很好。我用来构建应用程序的代码:

import bottle
import tw.api
from wsgiref.validate import validator
#.... A whole buttload of code
application = bottle.default_app()
application = tw.api.make_middleware(application, stack_registry=True)
application = validator(application)

编辑:我还要注意,我在使用Python 2.6.5的mod_wsgi 2.8和使用Python 2.7.3的mod_wsgi 3.3时遇到过这个问题。

编辑2: / static /的别名仍然有效,所以我似乎仍然在点击VirtualHost。如果我注释掉WSGIProcessGroup指令并重新启动apache,它将运行正常,但是在嵌入模式而不是守护进程模式。

2 个答案:

答案 0 :(得分:1)

配置的mod_wsgi部分似乎没有特别的错误,除了:

user=www-data group=www-data

是多余的,因为默认情况下Apache用户运行,因此不需要显式设置它们。除非您有特殊需要,否则不建议使用最大请求。

潜在问题更有可能是您的整个VirtualHost定义未被使用。

在VirtualHost中添加语法错误,以查看它是否被Apache读取。在其上添加带有“xxx”的行就足以触发语法错误。

如果正在读取,则需要查看是否已启用命名虚拟主机。即,存在适当的NameVirtualHost指令。

下一个问题是给ServerName的主机名是否实际上是以Apache结尾。你显然不拥有'app.example.com',但你真正使用的实际上是去了这个Apache。关闭Apache并再试一次。如果无法联系,那么至少可能是正确的。

之后,您需要确保没有现有的VirtualHost尝试同时服务于同一ServerName。

答案 1 :(得分:-1)

我怀疑你根本没打过这个VirtualHost。你有“NameVirtualHost *:80”吗?您是否真的通过app.example.com或应用程序名称访问该网站?