Nginx 清漆 Nginx Django?

Enr*_*ico 13 nginx varnish django

我有一个 django 应用程序,我想在它前面的服务器上设置 Varnish。在另一个 serverfault 线程中,有人建议将 Nginx 放在 Varnish 前面。

我应该将 Nginx 放在缓存服务器上的 Varnish 前面吗?如果是这样,我应该在应用服务器上使用 Nginx 吗?

Jes*_*r M 10

我们说的是总共 1 - 3 台前端服务器,而不是在各层之间进行负载平衡的大型服务器群?

将 nginx 放在 Vanish 前面使您可以即时进行 HTTP 压缩。这是一种性能最佳实践,但可以省略。(Varnish 中的内容通常保持未压缩状态,以便 ESI Includes 工作,因此您不必根据 Vary 标头/浏览器匹配处理同一对象的多个缓存版本。)

关于应用服务器上的 nginx —— Apache 与 mod_wsgi 是否不是现在部署新 Django 安装的推荐和最常用的方法?我不知道在 Django 中使用 nginx/fastcgi 而不是 Apache/mod_wsgi 的令人信服的理由;但是你应该从 Django 专家那里得到建议。

关于 Varnish 具有 nginx 没有的有吸引力的负载平衡功能,我看不出它们是什么?清漆具有随机和循环平衡。nginx 具有循环、客户端 IP 和一致的散列——我认为 Varnish 没有显着的好处?是 VCL 或 Varnish 的优雅配置重新加载还是其他什么?

对于小型 1-3 个服务器设置,我想我会这样做

清漆 --> Apache / mod_wsgi / Django

或者可能

Squid --> Apache / mod_wsgi / Django

并且为了简单起见忽略 HTTP 压缩,除非带宽很昂贵。

更新:

Graham Dumpleton 在下面写了一篇有价值的评论。他提到了一个非常常见的设置,例如 VPS 上的博客,或没有缓存的小型网络农场:

nginx --> Apache / mod_wsgi / Django

这是一个非常好的解决方案,原因如下:

  1. 简单的设置
  2. nginx 具有高速和最小开销,处理静态文件服务和浏览器连接保活。
  3. Django 运行在 Graham Dumpleton 的优秀 mod_wsgi 中,这是 Django 的推荐平台。

我最初没有提到这一点的原因是 OP 似乎需要 Varnish,一种非常高性能的缓存解决方案。nginx / Apache / mod_wsgi 组合无法以与 Varnish 相匹配的性能和灵活性级别进行缓存。

  • 许多人没有意识到 nginx 在该用例中提供的另一件事是 nginx 将 Apache 与慢速客户端隔离开来。这是因为 nginx 不会流式传输达到特定大小的请求内容。相反,它将缓冲请求标头和内容,并且仅在拥有所有内容时才代理请求。这意味着它仅在处理请求所需的所有信息都可用时才将其交给 Apache。因此,Apache/mod_wsgi 将在尽可能短的时间内处于忙碌状态,并且进程/线程不会被慢速客户端占用。缓冲措施也在反向发生,因此 Apache 也可以更快地完成。 (4认同)
  • 您甚至可以像许多人出于各种原因而使用“nginx --> Apache/mod_wsgi/Django”。 (2认同)
  • @Graham Dumpleton:很高兴有你在这里,我希望你能留下来。:-) 。关于 nginx HTTP 多路复用/智能连接处理,我完全同意。 (2认同)