【问题标题】:Running Django on Apache Behind nginx - What Apache optimizations can I make在 nginx 后面的 Apache 上运行 Django - 我可以进行哪些 Apache 优化
【发布时间】:2011-10-24 18:08:59
【问题描述】:

我有一个已配置并正在运行的设置,我希望对其进行优化。在这个阶段,我不想将 Apache 换成 gunicorn 或其他选项。

我的设置是这样的:

Ubuntu 11.04 来自 apt-get 的默认 nginx 来自 apt-get 的默认 apache

Nginx 提供静态文件,并将应用程序请求传递给 Apache。 Apache 将有 5-8 个 Django 项目(即不同的网站)。中小流量。 Apache 只有 django 项目(通过 mod_wsgi 提供服务)——我不需要 php 或 Django 不需要的任何东西。

在默认的 Ubuntu/Apache 中,我可以禁用哪些模块,以及我可以做任何其他配置调整以更优化地使用我机器上的资源。

【问题讨论】:

    标签: django apache nginx mod-wsgi ubuntu-11.04


    【解决方案1】:

    一个配置调整是,如果您不需要 apache 来提供除 django 站点之外的任何其他服务,请完全放弃 apache。

    使用专用的 WSGI 服务器,例如 uwsgi (http://projects.unbit.it/uwsgi/) 或 gunicorn (http://gunicorn.org/)。它们有据可查,并且如此资源使用率很低。

    【讨论】:

    • 使用专用的 WSGI 服务器,您还可以更好地平衡机器可用性,因为您为每个应用程序分配特定数量的工作人员,因此在 DOS 情况下没有单个应用程序可以关闭其他应用程序。
    • 您还可以分别重启每个应用,并通过操作系统信号提高/降低工作人员的可用性(使用 gunicorn,您分别发送 TTIN 或 TTOU)
    • 问题表明我不想用 gunicorn 或不同的 wsgi 服务器替换 apache。我正在寻求更多关于让 apache 最适合我的场景的具体技巧。
    • 抱歉,我忽略了那句话 :(。当我将我的 django 大型站点系统(30 多个站点,450 个工作人员,在一台机器上每秒约 900 个请求)从 apache 切换到 gunicorn 时,这是一个bless。如果您在任何时候考虑切换,为什么不现在呢?
    • mod_wsgi 的守护程序模式允许您为每个站点轻松指定不同数量的进程和线程。守护程序模式还允许您通过触摸 WSGI 文件轻松地重新启动站点。您也可以使用信号来重新启动,但没有增加/减少进程数量的方法。有一些复杂的方法,您可以通过使用备用进程并将站点映射到其他进程来实现相同的目标,但通常不值得麻烦,您最好适当地更改配置。
    【解决方案2】:

    您可以使用WSGIOptimize 选项将所有 .py 文件转换为 .pyo。您也可以使用Memcached 来启用缓存。 This 博客描述了如何在一个守护进程中运行多个 django 站点。据说它在您需要为大量站点提供服务的情况下很有用,每个站点的流量都很低。 This 包含来自 Jacob Kaplan-Moss 的提示。

    【讨论】:

    • 博客链接很有用,谢谢。 Jacob 的帖子有点老了,但还是有一些有用的东西。
    • WSGIOptimize 实际上几乎没有什么区别,而且实际上可能很危险,因为它可以从可能依赖的程序中删除文档字符串。它没有区别的部分原因是优化部分仅适用于启动,但如果以合理的方式设置,mod_wsgi 进程将在内存中持久存在。所以除了进程的初始启动之外不做任何事情。
    猜你喜欢
    • 2019-02-28
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2011-09-25
    • 1970-01-01
    • 2015-07-29
    • 2021-05-01
    相关资源
    最近更新 更多