【问题标题】:Setting up Nginx as a reverse proxy for Apache vs just Apache Event MPM将 Nginx 设置为 Apache 的反向代理而不是 Apache Event MPM
【发布时间】:2017-12-05 13:28:43
【问题描述】:

在Djangodocs for setting up mod_wsgi中,教程注释:

Django 本身不提供文件;它把这项工作留给了任何一个网络 您选择的服务器。

我们建议使用单独的 Web 服务器 - 即不是 运行 Django——用于服务媒体。以下是一些不错的选择:

  • Nginx
  • Apache 的精简版

我知道这可能是由于 Apache 生成新进程来为每个静态文件提供服务时浪费了资源,而 Nginx 避免了这种情况。但是,Apache 的(新的?)事件 MPM 似乎类似于 Nginx 实例将请求传递给 Apache 工作人员 mpm。因此我想问:与其将 Nginx 设置为 Apache 的反向代理,使用 Apache Event MPM 是否足以在 Apache 中提供静态文件?

【问题讨论】:

    标签: django apache nginx mod-wsgi


    【解决方案1】:

    Apache 不会为每个静态文件生成一个新进程。 Apache 保持持久进程来处理并发和后续请求,就像 nginx 一样。不同之处在于 nginx 使用完整的异步模型,而 Apache 依赖进程和/或线程来实现并发,尽管事件 MPM 使用异步模型来接受初始请求并保持连接。对于大多数人来说,单独使用 Apache 仍然是一个可以接受的解决方案。因此,如果您刚起步并认为您从一开始就需要 Google/Facebook 规模的解决方案,请不要自以为是。

    比单独的 Web 服务器更重要的是,如果使用 Apache/mod_wsgi,则以不同的主机名提供静态文件。这样可以避免为所有静态文件请求发送重量级 cookie 信息。您可以使用 Apache 中的虚拟主机来执行此操作。还要确保您使用 mod_wsgi 的守护程序模式来运行 Django 应用程序,因为这是一个更好的架构,并提供了更多用于设置超时的选项,因此您可以让您的应用程序从各种可能导致服务器在过载时锁定的情况中恢复。

    对于提供比直接使用 Apache/mod_wsgi 并自行配置更好的开箱即用配置和体验的系统,请查看使用mod_wsgi-express

    【讨论】:

    【解决方案2】:

    关于分离网络服务器的建议有两个优点。格雷厄姆清楚地概述了一个。另一个是“可预测的资源消耗”。

    每个 HTML 页面的资源数量不同。让一个网络服务器为应用程序提供服务,另一个为静态资源提供服务,这样做的好处是您可以确切地知道可以为多少并发访问者提供服务:Apache 的 MaxClients 设置。

    如果这会减慢图像的加载速度,那么这些网络服务器只需要很少的模块并且没有可衡量的 CPU 功率,因此您只需要一台带有 SSD 磁盘的单核机器,而且扩展成本很低。

    正如 Graham 所指出的,它以具有不同主机名的 STATIC_URL 开头。一开始在同一台服务器上运行它。扩大规模时,将该主机名绑定到从多个图像服务器后端机器提供服务的反向代理。

    【讨论】:

      猜你喜欢
      • 2019-05-29
      • 2018-02-02
      • 1970-01-01
      • 2015-03-07
      • 2021-07-06
      • 1970-01-01
      • 2017-10-04
      • 2013-11-18
      • 2010-09-21
      相关资源
      最近更新 更多