使用 mod_wsgi 在 apache 上设置 Django

Posted

技术标签:

【中文标题】使用 mod_wsgi 在 apache 上设置 Django【英文标题】:Setting up Django on apache with mod_wsgi 【发布时间】:2014-05-11 14:56:12 【问题描述】:

尝试使用 mod_wsgi 在 CentOS 6 上的 apache 上设置 Django,但我不确定我的设置有什么问题。我尝试了很多不同的设置指南,但我总是在 apache 日志中得到相同的错误:

[Mon Mar 31 19:51:22 2014] [error] [client ::1] mod_wsgi (pid=39608): Target WSGI       script '/opt/django/movies/movies/wsgi.py' cannot be loaded as Python module.
[Mon Mar 31 19:51:22 2014] [error] [client ::1] mod_wsgi (pid=39608): Exception occurred processing WSGI script '/opt/django/movies/movies/wsgi.py
[Mon Mar 31 19:51:22 2014] [error] [client ::1] Traceback (most recent call last):
[Mon Mar 31 19:51:22 2014] [error] [client ::1]   File "/opt/django/movies/movies/wsgi.py", line 16, in <module>
[Mon Mar 31 19:51:22 2014] [error] [client ::1]     from django.core.wsgi import get_wsgi_application
[Mon Mar 31 19:51:22 2014] [error] [client ::1] ImportError: No module named wsgi

wsgi.py

import os
import sys

sys.path.append('/opt/django/movies/movies')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

/etc/httpd/conf/httpd.conf

<VirtualHost *:80>
WSGIScriptAlias / /opt/django/movies/movies/wsgi.py
ServerName localhost
DocumentRoot "/opt/django/movies"
<Directory /opt/django/movies/movies>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

</VirtualHost>

【问题讨论】:

看起来你的服务器上没有启用 wsgi(我什至在我的 mods_available 文件夹中都没有看到 wsgi) - 如果你刚刚启用了这样的 mod,你是否重新启动了服务器? 【参考方案1】:

mod_wsgi 使用的 Python 安装中安装的 Django 版本是旧版本。 django.core.wsgi 模块并不总是存在。

您应该弄清楚 mod_wsgi 正在使用什么 Python 安装并更新已安装的 Django。见:

http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Python_Installation_In_Use

顺便说一句,不要将 DocumentRoot 设置为使您的 Django 项目位于该目录下,这是迈向安全问题的一步,因为 Apache 的轻微配置错误可能会暴露您的所有源代码,包括带有密码的设置文件。

【讨论】:

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

使用 WSGI 和 apache 设置 django

使用 mod_wsgi 在 Ubuntu 16.04 apache2 上部署 Django 应用程序

使用 apache2 在 mod_wsgi 上运行 django python 3.4

使用 mod_wsgi 在 Apache 上部署多个 django 应用程序

使用 mod_wsgi 和 WinSCP 在 Apache 服务器上部署 Flask 应用程序

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