用WSGI和Apache配置Django

13 投票
4 回答
12450 浏览
提问于 2025-04-11 00:17

我选择了使用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文档的说明:

首先,所有的重定向指令在处理别名指令之前就会被处理,因此任何匹配RedirectRedirectMatch的请求都不会应用别名。其次,别名和重定向是按照它们在配置文件中出现的顺序进行处理的,先匹配的指令优先。

8

注意,Alias和WSGIScriptAlias这两个指令的优先级是不一样的。所以,它们不会按照你写的文件顺序来处理。实际上,所有的Alias指令都比WSGIScriptAlias指令优先级高。因此,即使你把'/'的Alias放在WSGIScriptAlias后面,它仍然会优先处理Alias。

8

如果你把 Alias / 这一指令去掉,会发生什么呢?

撰写回答