使用 WSGI 和 apache 设置 django

Setup django with WSGI and apache

提问人:Doug Miller 提问时间:8/31/2008 更新时间:7/23/2013 访问量:12430

问:

我被卖给了 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 时,我得到的是一个目录列表,而不是呈现的网站。我想我已经正确地遵循了教程,但这显然是不正确的。我能做些什么来做到这一点?

python django apache mod-wsgi

评论


答:

8赞 John Millikin 9/1/2008 #1

如果删除该指令会怎样?Alias /

6赞 John Millikin 9/1/2008 #2

它有效。我不知道为什么,但它确实如此。

供将来参考:

它之所以有效,是因为 Apache 按顺序处理别名指令,并使用第一个匹配项。它总是在击中,这将匹配任何东西,之前.Alias /WSGIScriptAlias

mod_alias文档中:

首先,所有重定向都会在处理别名之前进行处理,因此与别名匹配或永远不会应用别名的请求。其次,别名和重定向按照它们在配置文件中出现的顺序进行处理,第一个匹配优先。RedirectRedirectMatch

8赞 Graham Dumpleton 6/24/2009 #3

请注意,Alias 和 WSGIScriptAlias 指令的优先级不同。因此,它们不会按写入的文件顺序进行处理。相反,所有 Alias 指令都优先于 WSGIScriptAlias 指令。因此,如果“/”的别名出现在 WSGIScriptAlias 之后,它仍然优先。

3赞 Shashank Singla 7/23/2013 #4

尝试按照本教程进行操作 - http://singlas.in/5-step-tutorial-for-using-django-with-apache-and-mod_wsgi/

您正在尝试在根 (/) 托管 apache /var/www/ 文件夹和 Django 应用程序。由于 Alias 指令优先于 WSGIScriptAlias,因此它正在呈现 apache 目录。

你可以尝试在 /app 上托管 Django 应用。或者,将 /var/www/ 文件夹托管在其他位置,如 /public