0

我有一个 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,它将运行良好,但在嵌入模式而不是守护进程模式下。

4

2 回答 2

1

配置的 mod_wsgi 部分似乎没有什么特别的问题,除了:

user=www-data group=www-data

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

根本问题更有可能是您的整个 VirtualHost 定义没有被使用。

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

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

下一个问题是给予 ServerName 的主机名是否实际上以 Apache 结尾。您显然不拥有“app.example.com”,但您真正使用的东西实际上是转到这个 Apache。关闭 Apache 并重试。如果无法联系到它,那么至少可能是对的。

之后,您需要确保您没有现有的 VirtualHost,它也试图为相同的 ServerName 服务。

于 2012-05-08T03:55:17.827 回答
-1

我怀疑你根本没有打这个虚拟主机。您在任何地方都有“NameVirtualHost *:80”吗?您实际上是通过 app.example.com 或应用名称访问该网站吗?

于 2012-05-08T03:51:55.607 回答