Nginx Varnish Nginx Django?


13

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

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

Answers:


10

我们总共谈论的是1-3个前端服务器,而不是大型服务器场,各层之间具有负载平衡?

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

关于应用服务器上的Nginx-Apache并带有mod_wsgi当今是否不是建议的,最常见的部署新Django安装的方式,将?我不知道在Django的Apache / mod_wsgi上使用nginx / fastcgi的令人信服的理由;但您应该从Django专家那里获得建议。

关于Varnish具有nginx所没有的有吸引力的负载平衡功能,我看不到它们是什么吗?清漆具有随机和循环平衡。nginx具有轮循机制,客户端IP和一致的哈希值-我认为Varnish不会带来明显的好处吗?是VCL还是Varnish的优美配置重新加载还是其他?

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

清漆-> Apache / mod_wsgi / Django

或许

鱿鱼-> Apache / mod_wsgi / Django

为简便起见,请忽略HTTP压缩,除非bandband昂贵。

更新:

格雷厄姆·邓普尔顿(Graham Dumpleton)在下面发表了宝贵的评论。他提到了一个非常常见的设置,例如VPS上的博客或没有缓存的小型Web场:

nginx-> Apache / mod_wsgi / Django

这是一个非常好的解决方案,其原因有两个:

  1. 设置简单
  2. nginx具有高速和最小的开销,可以处理静态文件服务和浏览器连接保持活动状态。
  3. Django在Graham Dumpleton出色的mod_wsgi(Django推荐的平台)中运行。

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


2
您甚至可以像许多人一样使用“ nginx-> Apache / mod_wsgi / Django”,这出于各种良好的原因。
09年

4
在许多用例中,nginx所提供的另一件事是很多人不会意识到的,那就是nginx将Apache与速度较慢的客户端隔离开来。这是因为nginx不会流传输最大大小的请求内容。相反,它将缓冲请求标头和内容,并且仅在具有所有请求时缓冲代理请求。这意味着只有在处理请求所需的所有信息可用时,它才会将其交给Apache。因此,Apache / mod_wsgi将在最短的时间内繁忙,并且进程/线程不会被慢速客户端占用。反向缓冲也会发生,因此Apache也可以更快地完成缓冲。
Graham Dumpleton 09年

2
@Graham Dumpleton:高兴有您在这里,希望您能留下来。:-)。关于nginx HTTP多路复用/智能连接处理,我完全同意。
Jesper M,2009年

首先,感谢Jesper和Graham抽出宝贵时间写出如此全面的回复。我打算将负载平衡服务器放在两个应用服务器的前面。一台服务器将处理大部分流量,第二台服务器主要用于故障转移和Beta测试新功能。
恩里科

Varnish之所以具有吸引力,是因为它使我可以完全控制将哪些请求发送到哪个后端。Varnish还对后端服务器进行健康检查,故障转移易于设置,并且可以正常处理缓慢/死机的后端(如果两个服务器都死机)。
恩里科

4

您可以使用不带清漆的nginx代理和缓存内容。


2
清漆具有一些吸引人的负载平衡功能,nginx并未开箱即用
Enrico

4
例如什么功能?
保持沉默

4

我正在成功使用Nginx,Varnish和Apache / mod_wsgi / Django。我从以下配置开始:

Nginx-> Apache / mod_wsgi / Django

一旦开始看到Apache的负载很大,就添加了Varnish:

Nginx->清漆-> Apache / mod_wsgi / Django

我将Nginx用作一种“ URL路由器”。Django管理员请求直接从Nginx发送到Apache。客户端请求从Nginx发送到Varnish,Varnish缓存来自Apache的请求,如果应用程序服务器不可用,它还会从缓存中提供“ graced”项。

我的Nginx服务器还直接提供某些静态内容(例如图像,CSS和javascript文件)。

总的来说,性能非常好。我注意到一些注意事项:

  1. 在繁忙的站点上,重新启动Varnish可能会导致应用服务器上的负载激增,因此最好将Varnish重新启动保持在最低水平。(Varnish似乎不像Nginx / Apache那样具有“重新加载”的功能,它只是重新读取其VC​​L文件)。相反,重新加载Nginx配置的影响最小。因此,我在Nginx中完成了大部分的URL重写和“路由”。
  2. Varnish很容易在Nginx和Apache之间插入。如果您开始注意到应用程序服务器上的高负载,那么即使使用默认配置添加清漆也确实会有所作为。
  3. 如果您使用Varnish,则肯定需要考虑如何处理缓存失效。
  4. 我的经验是,Varnish处理失败的后端要比Nginx优雅一些(如您先前指出的)。

我从未见过清漆在别的东西后面。Varnish通常是执行url路由器的负载平衡器。因此,您有2个Web服务器和1个代理或2个代理和1个Web服务器?q
ioanb7

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.