使用WSGI和Apache设置Django

13

我已经被 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个回答

8
请注意,别名(Alias)和WSGIScriptAlias指令的优先级不同。因此,它们不会按照文件顺序进行处理。相反,所有别名指令都优先于WSGIScriptAlias指令。因此,即使'/'的别名出现在WSGIScriptAlias之后,它仍然会优先处理。

8
如果您删除Alias /指令会发生什么?

6

它起作用了。我不知道为什么,但它确实起作用了。

供以后参考:

它能够起作用是因为Apache按顺序处理别名指令,并使用第一个匹配项。 它始终会先匹配 Alias /,这将匹配任何内容,然后再匹配 WSGIScriptAlias

来自 mod_alias 文档

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


3
尝试按照以下教程操作 - http://singlas.in/5-step-tutorial-for-using-django-with-apache-and-mod_wsgi/ 您想要将 Apache /var/www/ 文件夹和 Django 应用程序都托管在根目录 (/)。由于 Alias 指令优先于 WSGIScriptAlias,因此它会呈现 Apache 目录。
您可以尝试将 Django 应用程序托管在 /app。或者将 /var/www/ 文件夹托管在不同的位置,如 /public。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接