我有一个django应用程序,我想在它前面的服务器上设置清漆。 在另一个服务器故障线程中,有人build议把Nginx放在Varnish的前面。
我应该把Nginx放在caching服务器上的Varnish前面吗? 如果是这样,我应该在应用服务器上使用Nginx吗?
我们总共谈论1 – 3个前端服务器,而不是一个大型的服务器场,层之间有负载平衡?
把nginx放在Vanish之前,可以让你实时进行HTTP压缩。 这是performance最好的做法,但可以省却。 (Varnish中的内容通常保持未压缩状态,因此ESI包含工作,因此您不必处理同一对象的多个caching版本(取决于Vary头/浏览器匹配)。
关于应用程序服务器上的nginx – 是mod_wsgi的Apache,而不是现在部署新的Django安装的推荐和最常见的方式? 我没有意识到通过Apache / mod_wsgi为Django使用nginx / fastcgi是一个令人信服的理由; 但你应该从Django专家那里得到build议。
关于具有nginx没有的有吸引力的负载平衡function的Varnish,我不明白他们是什么? 清漆具有随机和循环平衡。 nginx具有循环法,客户端IP和一致性哈希 – 我没有看到Varnish的重大好处? 是VCL或Varnish的优雅configuration重新加载或其他?
对于一个小的1-3服务器设置,我想我会做
Varnish – > Apache / mod_wsgi / Django
或者可能
Squid – > Apache / mod_wsgi / Django
并忽略HTTP压缩为简单起见,除非带宽是昂贵的。
更新:
Graham Dumpleton在下面写了一篇有价值的评论。 他提到了一个非常常见的设置,例如VPS上的博客,或者没有caching的小型networking农场:
nginx – > Apache / mod_wsgi / Django
这是一个非常好的解决scheme,原因有两个:
我之前没有提到的原因是OP似乎需要Varnish,一个非常高性能的caching解决scheme。 nginx / Apache / mod_wsgi组合无法进行caching,其性能和灵活性与Varnish相匹配。
您可以使用不含清漆的nginx来代理和caching内容。
我已经成功地使用了Nginx,Varnish和Apache / mod_wsgi / Django。 我开始以下configuration:
Nginx - > Apache / mod_wsgi / Django
一旦我开始看到Apache的重大负载,我添加了清漆:
Nginx - > Varnish - > Apache / mod_wsgi / Django
我使用Nginx作为一种“URL路由器”。 Djangopipe理请求直接从Nginx发送到Apache。 客户端请求从Nginx发送到Varnish,caching来自Apache的请求,如果应用程序服务器不可用,还会从caching中提供“放宽”的项目。
我的Nginx服务器也直接提供某些静态内容(如图片,CSS和JavaScript文件)。
总的来说,performance非常出色。 我注意到了一些我应该提到的警告:
我正在使用Nginx-> Varnish-> uWSGI-> Django