我正在考虑一个新的Web服务器的体系结构。 将Varnish作为Nginx之前的caching作为反向代理,并在apache之前为静态文件提供静态文件是一个好主意?
我要在rails应用程序上运行php和ruby。
会有太多的开销通过PHP请求通过其他两个进程的Apache?
非常感谢!
是的,这是有效的。 我个人的做法是预先使用Varnish并使用VCL将静态的NGINX请求与繁重的工作(无论是Apache还是Passenger或者…无关紧要)之间的stream量进行分割。 如果它在同一台机器上,那么尤其如此,因为您不需要额外的开销。 它不一定会给你买东西。
Varnish还没有支持gzip压缩,因此可能会将它与前面的nginx进行交换,以压缩清漆发回的内容。 由于varnish和nginx不会争夺相同的资源(nginx使用CPU进行gzip压缩,而varnish使用内存),所以它们应该在同一台机器上平稳运行。
Varnish现在支持gzip压缩 ,所以除非你需要SSL终止(正如评论中所build议的那样),否则我会build议把油漆直接与互联网联系。
对于http:
(internet) - >(varnish,gzip,caching,esi) - >(application)
对于https:
(internet) - >(nginx,ssl) - >(varnish,gzip,caching,esi) - >(application)
如果你也想要apache(对于无处不在的mod_foobar支持),我会把它放在清漆和应用程序之间
更新:更新为在清漆3.0中包含gzip支持。 按照注释中的build议添加了ssl / esi
开销的数额不应该是显着的。 我假设你想要这两层的部分原因是为了可扩展性; 在这种情况下,你很可能会看到,相对于Apache而言,varnish和nginx并不是很努力。
如果你在一台机器上的所有三层,在达到服务器本身的容量之前,应该有较less的性能影响。
作为替代,为什么没有清漆+ nginx与乘客? 我过去使用过这个设置,使用乘客的nginx比较轻,而且运行得很好。 可能值得考虑一下,如果你没有嫁给运行你的铁轨堆栈的Apache。
我是创业电子商务平台的系统pipe理员。 我们在我们的PHP / apache堆栈前面使用了varnish + nginx,它创造了奇迹。
我们有一个高内存使用的应用程序,应用程序每个webnode使用大约15-20gig的RAM,一旦我们把清漆放在前面,现在每个节点大约有8gig的RAM。 他们从来没有刺。
所以我强烈推荐它。
我正在运行Drupal,在Apache + PHP + MySQL服务器上使用boost模块,但在他们面前,我使用的是带有gzip-staticfunction的Nginx,并使用boost的结果来为用户提供服务。
而在所有我使用清漆,所有在同一台PC上,我有很好的结果。
我也使用Nginx来调整Drupal对caching不太好的头文件。
这不是一个好主意,除非你需要像ESI这样的东西。 Nginx拥有自己的caching系统, 性能更好 。
Apache可以用来终止(解密)SSL,检查http://noosfero.org/Development/Varnish#SSL