我有一个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,它将运行正常,但是在嵌入模式而不是守护进程模式。
答案 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或应用程序名称访问该网站?