使用 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 我得到的是目录列表而不是呈现的网站。我认为我正确地遵循了教程,但显然是不正确的。我该怎么做才能使这项工作成功?
解决方案
如果删除会发生什么 Alias /
指示?
其他提示
请注意,Alias 和 WSGIScriptAlias 指令不具有相同的优先级。因此,它们不会按写入的文件顺序进行处理。相反,所有 Alias 指令都优先于 WSGIScriptAlias 指令。因此,如果“/”的别名出现在 WSGIScriptAlias 之后也没关系,它仍然会优先。
有用。我不知道为什么,但确实如此。
备查:
它之所以有效,是因为 Apache 按顺序处理别名指令,并使用第一个匹配项。一直都在打 Alias /
, ,它将匹配之前的任何内容 WSGIScriptAlias
.
来自 mod_alias
文档:
首先,所有重定向都会在别名处理之前处理,因此与别名匹配的请求
Redirect
或者RedirectMatch
永远不会应用别名。其次,别名和重定向按照它们在配置文件中出现的顺序进行处理,第一个匹配优先。
尝试按照本教程进行操作 - 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