【问题标题】:How to set mod_wsgi for apache and django?如何为 apache 和 django 设置 mod_wsgi?
【发布时间】:2011-02-12 12:18:09
【问题描述】:

我知道已经有很多关于这个主题的信息,但是它们相当笨拙,没有那么简单和富有表现力。 谁能解释我如何使用djangomod_wsgiapache

【问题讨论】:

  • -1。实际文档有什么问题?你有什么问题?你试过什么?
  • @daniel - 他/她是新用户。它当然没有必要通过降级他们的帖子来恐吓新用户并吓跑他们的余生。关于提供更具体信息的温和提醒就足够了。
  • 虽然我不是新用户。我已经用 python 编程了 3 年。我仍然无法让 mod_wsgi 工作! fml
  • OOI 你让这个运行了吗?我正在编写一份文档,试图根据用户的需求简化 Django 部署选择,所以我想知道您最终是如何做到的!

标签: django apache mod-wsgi


【解决方案1】:

mod_wsgi 并不是特别适合运行 Python WSGI 应用程序,或者,如果您愿意,还有更多 Python 方式可以运行您的 Django 实例。

首先,我认为理解 Apache 的请求处理模型并正确配置它需要付出很多努力,尤其是在 mod_wsgi 方面。如果您没有完全设置或锁定使用 Apache,我建议您查看在 @Neo 建议的 nginx 代理后面运行 SpawningGreen Unicorn

Spawning 和 gunicorn 的速度都快得离谱,不需要您使用特定的 Python 解释器编译 Apache 并提供对动态更新代码库、Django 挂钩和其他开箱即用的好东西的支持。 nginx、Spawning 和 gunicorn 都有一个简单的处理模型,彼此完全独立,因此您可以获得更透明的架构,更易于维护和监控。

这里是 Eric Florenzano 撰写的关于使用 Django 设置 Spawning 的精彩 guide,以及项目作者 Benoît Chesneau 撰写的关于使用 gunicorn 运行 Django 的 thorough presentation

无论您选择哪个,@home 都会让您感觉良好。

【讨论】:

  • 为 WSGI 应用程序配置 mod_wsgi 并不难。问题是让人们真正阅读官方文档,而不是依赖一些任意个人的博客文章,了解他们是如何为他们的特定设置做到的,这可能与其他任何人无关,甚至可能对其他人不起作用。无论如何,有些人只是没有理解 Apache 的心态,在这种情况下,替代方案可能更合适,特别是如果你是某种 Python 纯粹主义者,对将 Python 嵌入 Apache 的想法感到恐惧。
  • 顺便说一句,Neo 并没有建议他们在 nginx 代理后面运行 Spawning 或 Green Unicorn。他们建议在 nginx 代理后面运行 Apache/mod_wsgi。对于大多数人来说这不是绝对必要的,但是如果试图充分利用 Apache/mod_wsgi,那么在前面使用 nginx 作为代理确实会带来各种优势,这使得 Apache/mod_wsgi 在现实世界的流量场景中表现更好。
  • @Graham,是的,我只是指@Neo 关于使用 nginx 作为反向代理来提供静态媒体的建议,尽管我也看到这可能会有点错误(并且会很快跳编辑它)。我在这里进行了健康的考虑,因为 OP 显然是游戏的新手:Apache 是它自己的野兽,再加上使用硬编码配置或 site 为 mod_wsgi 配置 PYTHONPATH 和其他诡计......更不用说除了 mod_wsgi Apache 将没有其他用途 - 无论如何 - 去产卵或 gunicorn!
  • @Graham,mod_wsgi 并不难。但是apache2是!它一直在向我显示“您无权访问/”之类的东西
  • @彼得。观看code.google.com/p/modwsgi/wiki/… 上的演示文稿,因为它解释了为什么你会得到它。
【解决方案2】:

我最近在 Django 上设置了我的应用程序,而这份指南正是我所需要的。 http://blog.stannard.net.au/2010/12/11/installing-django-with-apache-and-mod_wsgi-on-ubuntu-10-04/

所以基本上,这个过程是

  1. 设置另一台服务器以在端口 80 上提供静态文件(例如 Nginx)。
  2. 在其他端口上设置 apache。
  3. 使用 mod_wsgi 在 apache 上运行 django 应用程序
  4. 将所有非静态/非媒体文件反向代理到 apache+mod_wsgi/django

让我知道你在哪一步卡住了。

【讨论】:

    【解决方案3】:

    以下是我在 Mac 上使用 Mac Ports 的 Apache、Python 和 Django 的方法。这不一定是最好的方法,但它对我有用。

    我有以下顶级目录:

    • lib:python 代码,settings.py 在 lib/settings.py 中
    • static: Apache 提供的东西,例如媒体和 CSS
    • tools:开发工具,例如推出脚本。

    这里是一个示例站点的 Apache 配置,然后查看下面的 Django WSGI 脚本:

    <VirtualHost *:80>
        # Stuff to served statically is in media directory
        DocumentRoot /Library/WebServer/mysite/static
    
        ServerName mysite.local
    
        # Redirect to homepage action
        RewriteEngine on
        RewriteRule ^/$ /mysite/ [R,L]
    
        # Static dirs first
        Alias /static/ /Library/WebServer/mysite/static/
    
        <Directory "/Library/WebServer/mysite/static/">
            Order allow,deny
            Allow from all
        </Directory>    
    
        # Now everything else goes to Django    
        WSGIDaemonProcess mysite-django.local processes=1 threads=5 maximum-requests=0 display-name=%{GROUP} python-path=/Library/WebServer/mysite/lib python-eggs=/tmp
        WSGIProcessGroup mysite-django.local
        WSGIScriptAlias / /Library/WebServer/mysite/lib/apache/django_wsgi.py
    
        <Directory "/Library/WebServer/mysite/lib/apache">
            Order allow,deny
            Allow from all
        </Directory>    
    
    </VirtualHost>
    

    Django WGCI 脚本在 lib/apache/django_wsgi.py 中:

    import os
    import sys
    
    os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
    
    import django.core.handlers.wsgi
    application = django.core.handlers.wsgi.WSGIHandler()
    

    【讨论】:

    • 您可以将 'processes=1' 选项放到 WSGIDaemonProcess 中,因为它默认为单个进程。使用 'processes' 选项会导致 wsgi.multiprocess 标志在 WSGI 环境中的设置方式存在细微差别,如果您想在浏览器中使用 WSGI 调试器,这可能会反过来影响您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2011-12-12
    • 2012-06-09
    • 2014-03-02
    • 2014-06-21
    • 2014-11-29
    • 2012-04-22
    相关资源
    最近更新 更多