关于在 Apache + mod_python 上部署 Django 项目

Posted

技术标签:

【中文标题】关于在 Apache + mod_python 上部署 Django 项目【英文标题】:About deploying a Django project on Apache + mod_python 【发布时间】:2010-06-22 15:39:54 【问题描述】:

我在部署 Django 项目时遇到问题 - 审查委员会。我按照文档中的说明进行操作,但在尝试访问该站点时出现“错误 403”错误。也许我应该在 serverfault.com 上发布这个问题,但我认为这可能有助于人们编写/部署 Django 应用程序。

这里是安装:

我在/data/www/reviewboard安装了Review Board:

. |-- 配置 | |-- apache-modpython.conf | |-- 搜索-cron.conf | `-- settings_local.py |-- 数据库 | `--reviewboard.db |-- 文档 | |-- 错误文档-> /usr/lib/python2.6/site-packages/ReviewBoard-1.0.8-py2.6.egg/reviewboard/htdocs/errordocs | |-- 媒体 | | |-- 管理员 -> /usr/lib/python2.6/site-packages/ReviewBoard-1.0.8-py2.6.egg/reviewboard/htdocs/media/admin | | |-- djblets -> /usr/lib/python2.6/site-packages/Djblets-0.6.2-py2.6.egg/djblets/media | | |-- rb -> /usr/lib/python2.6/site-packages/ReviewBoard-1.0.8-py2.6.egg/reviewboard/htdocs/media/rb | | `-- 上传 | | `-- 图片 | `--rb | |-- 错误文档-> ../errordocs/ | `-- 媒体 -> ../media/ |-- 日志 `--tmp

所有文件对httpd用户有读权限,数据库和uploaded目录对httpd用户有写权限。

conf/apache-modpython.conf的内容是:

  <VirtualHost *:80>
ServerName A.B.C.edu
DocumentRoot "/data/www/reviewboard/htdocs"

# Error handlers
ErrorDocument 500 /errordocs/500.html

# Serve django pages
<Location "/rb">
    PythonPath "['/data/www/reviewboard/conf'] + sys.path"
    SetEnv DJANGO_SETTINGS_MODULE reviewboard.settings
    SetEnv PYTHON_EGG_CACHE "/data/www/reviewboard/tmp/egg_cache"
    SetHandler mod_python
    PythonHandler django.core.handlers.modpython
    PythonAutoReload Off
    PythonDebug Off
    # Used to run multiple mod_python sites in the same apache
    PythonInterpreter reviewboard_reviewboard
</Location>

# Serve static media without running it through mod_python
# (overrides the above)
<Location "/media">
    SetHandler None
</Location>
<Location "/errordocs">
    SetHandler None
</Location>

<Directory "/data/www/reviewboard/htdocs">
    AllowOverride All
</Directory>

# Alias static media requests to filesystem
Alias /media /data/www/reviewboard/htdocs/media
Alias /errordocs /data/www/reviewboard/htdocs/errordocs
  </VirtualHost>

我还在 Apache 主配置文件中引用了这个文件,/etc/httpd/conf/httpd.conf 如下:

Include /data/www/reviewboard/conf/apache-modpython.conf

当我尝试通过http://A.B.C.edu/rb 访问该站点时,我收到 403 错误,并在 httpd 错误日志中看到此消息:

[2010 年 6 月 22 日星期二 08:52:57] [通知] Apache/2.2.11 (Mandriva Linux/PREFORK-10.1mdv2009.1) mod_python/3.3.1 Python/2.6.1 DAV/2 SVN/1.6.1 mod_ssl/ 2.2.11 OpenSSL/0.9.8k 配置——恢复正常操作 [2010 年 6 月 22 日星期二 08:53:30] [错误] [客户端 X.X.X.X] 客户端被服务器配置拒绝:/data/www/reviewboard/htdocs/rb

有人知道我做错了什么吗?提前致谢!

【问题讨论】:

【参考方案1】:

您需要授予对 /data/www/reviewboard/htdocs 的访问权限

<Directory "/data/www/reviewboard/htdocs">
    Order allow,deny
    Allow from *
    AllowOverride All
</Directory>

【讨论】:

感谢您的回答。我添加了您的建议,但日志中仍然出现相同的错误。似乎 httpd 试图访问不存在的“/data/www/reviewboard/htdocs/rb”目录。配置文件不是告诉 httpd 运行 Django 应用程序而不是访问普通文件系统吗? 哦,我明白你的意思了。 Apache 正在获取该目录而不是发送到 mod_python。我的回答是试图帮助处理 403。我通常使用 mod_wsgi,所以恐怕 mod_python 问题对我来说不是很清楚。 没错。关于我在 mod_python 上做错了什么有什么想法吗?配置文件实际上是由 Review Board 的“rb-site”脚本自动生成的。【参考方案2】:

从 Review Board 的作者那里找到答案。诀窍是添加

Options FollowSymlinks

在指向media 目录的&lt;Location&gt; 标记中,因为该目录包含符号链接。

更多细节在这篇文章中:

http://groups.google.com/group/reviewboard/browse_thread/thread/6fac4d0041237f15/

【讨论】:

以上是关于关于在 Apache + mod_python 上部署 Django 项目的主要内容,如果未能解决你的问题,请参考以下文章

最近在虚拟机上想配置apache2 上的django时提示mod_python error本地服务器遇到的问题

如何设置 Python 脚本以在 Apache 2.0 中工作?

pythonmod_pythonapache配置

在 Apache/Windows 上设置 Python; IDE 问题

使用 WSGI 和 apache 设置 django

mod_wsgi 的两种模式