用WSGI和Apache配置Django
我选择了使用mod_wsgi和apache,而不是mod_python。
我已经安装好了所有的组件(django、apache、mod_wsgi),但是在部署的时候遇到了问题。
我使用的是osx 10.5,apache 2.2和django 1.0b2,还有mod_wsgi-2.3。
我的应用程序叫做tred。
这里是相关的文件:
httpd-vhosts(包含在httpd-conf中)
NameVirtualHost tred:80 ServerName tred Alias /admin_media /usr/lib/python2.5/site-packages/django/contrib/admin/media Order allow,deny Allow from all Alias /media /Users/dmg/Sites/tred/media Order allow,deny Allow from all Alias / /Users/dmg/Sites/tred/ Order allow,deny Allow from all WSGIScriptAlias / /Users/dmg/Sites/tred/mod_wsgi-handler.wsgi WSGIDaemonProcess tred user=dmg group=staff processes=1 threads=10 WSGIProcessGroup tred
mod_wsgi-handle.wsgi
import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..') os.environ['DJANGO_SETTINGS_MODULE'] = 'tred.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
当我访问 http://tred 时,看到的是一个目录列表,而不是渲染出来的网站。我觉得我按照教程做的没错,但显然出了问题。我该怎么做才能让它正常工作呢?
4 个回答
6
它能工作。我也不知道为什么,但就是能。
为了将来参考:
它能工作的原因是,Apache会按照顺序处理别名指令,并使用第一个匹配的指令。它总是先遇到Alias /
,这个指令会匹配任何请求,然后才是WSGIScriptAlias
。
来自mod_alias
文档的说明:
首先,所有的重定向指令在处理别名指令之前就会被处理,因此任何匹配
Redirect
或RedirectMatch
的请求都不会应用别名。其次,别名和重定向是按照它们在配置文件中出现的顺序进行处理的,先匹配的指令优先。
8
注意,Alias和WSGIScriptAlias这两个指令的优先级是不一样的。所以,它们不会按照你写的文件顺序来处理。实际上,所有的Alias指令都比WSGIScriptAlias指令优先级高。因此,即使你把'/'的Alias放在WSGIScriptAlias后面,它仍然会优先处理Alias。
8
如果你把 Alias /
这一指令去掉,会发生什么呢?