使用 WSGI 和 apache 设置 django

Posted

技术标签:

【中文标题】使用 WSGI 和 apache 设置 django【英文标题】:Setup django with WSGI and apache 【发布时间】:2010-09-07 09:35:18 【问题描述】:

我在 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 中)

名称VirtualHost tred:80 服务器名称 别名 /admin_media /usr/lib/python2.5/site-packages/django/contrib/admin/media 命令允许,拒绝 允许所有人 别名 /media /Users/dmg/Sites/tred/media 命令允许,拒绝 允许所有人 别名 / /Users/dmg/Sites/tred/ 命令允许,拒绝 允许所有人 WSGIScriptAlias / /Users/dmg/Sites/tred/mod_wsgi-handler.wsgi WSGIDaemonProcess 用户=dmg 组=员工进程=1 线程=10 WSGIProcessGroup 趋势

mod_wsgi-handle.wsgi

导入系统 导入操作系统 sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..') os.environ['DJANGO_SETTINGS_MODULE'] = 'tred.settings' 导入 django.core.handlers.wsgi 应用程序 = django.core.handlers.wsgi.WSGIHandler()

当我转到http://tred 时,我得到的是目录列表,而不是呈现的网站。我想我已经正确地遵循了教程,但这显然是不对的。我可以做些什么来完成这项工作?

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

供将来参考:

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

来自mod_alias documentation:

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

【讨论】:

【参考方案3】:

注意 Alias 和 WSGIScriptAlias 指令没有相同的优先级。因此,它们不会按文件顺序进行处理。相反,所有 Alias 指令都优先于 WSGIScriptAlias 指令。因此,如果 '/' 的别名出现在 WSGIScriptAlias 之后,则无关紧要,它仍然具有优先权。

【讨论】:

【参考方案4】:

尝试按照本教程进行操作 - 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

【讨论】:

以上是关于使用 WSGI 和 apache 设置 django的主要内容,如果未能解决你的问题,请参考以下文章

apache 服务器没有使用正确的 virtualenv 和 WSGI 设置

使用 mod_wsgi 在 apache 上设置 Django

Django 虚拟主机设置。 Apache mod_wsgi

如何在 Apache 和 mod_wsgi 中使用 Flask 路由?

Django + mod_wsgi。从 Apache 的 SetEnv 设置操作系统环境变量

初始化使用 Apache 和 mod_wsgi 运行的 Flask 应用程序