我们目前通过 Apache 和 Apache Passenger 为大多数 Rails 和 LAMP 应用程序提供服务,但我们正在考虑添加 Nginx 或 Varnish 作为反向代理,以在一定程度上减轻我们服务器的负载。
我知道你能同时使用 Varnish 和 Nginx,但考虑到需要投入时间来学习两者的工作原理,并且我们希望尽可能减少基础设施中“移动部件”的数量,我试图找出使用以下方法的优缺点:
- nginx 本身作为反向代理/缓存
- 仅使用 Varnish 作为反向代理/缓存
- nginx 和 varnish 一起使用
我知道 nginx 以速度极快而闻名,并且随着它越来越受欢迎,它作为一个功能齐全的 http 服务器而声名鹊起,所以我可以看到花一些时间来学习这个服务器如何工作是有道理的,但 Varnish 对我来说仍然是一个未知数。
如果 nCache 现在在 Nginx 中,为什么我还要使用 Varnish?
谢谢
答案1
您打算使用 Edge Side Includes (ESI) 吗?如果是,则 Nginx ESI 模块已损坏并且存在一些未解决的错误。如果您使用 Varnish,则输出不会被压缩,因此您只能使用 Nginx 对启用 ESI 的页面进行压缩。虽然我使用 Python 框架,但 Rails 也类似。
使用您当前的设置,您可以执行以下操作:
Nginx -> Apache -> Passenger -> Rails Varnish -> Apache -> Passenger -> Rails
两者都会落在您现有系统的前面。使用 Nginx,您还可以让其直接访问静态文件,并允许其提供这些文件,而无需通过 Apache 代理。使用 Location 指令,您可以分割部分 Web 空间,并防止其必须通过代理。
但是,如果你想完全迁移到 Nginx,你的基础设施将变成:
nginx -> 乘客 -> rails (nginx -> uwsgi -> python)
如果添加 Varnish,最终结果如下:
清漆 -> nginx -> 乘客 -> 导轨
除非你使用 ESI,在这种情况下你最终会得到:
nginx -> varnish -> nginx -> 乘客 -> 轨道
在某些时候,将 Varnish 从组合中删除会变得非常有趣。但是,最近的 Varnish 版本仍然比 Nginx 的缓存速度更快,并且您可以很好地控制如何缓存。虽然 Nginx 和 Varnish 都为您提供了相当多的控制权,但 Varnish 的 VCL 允许您编写 C 代码来执行开箱即用的功能,而无需触及守护程序的源代码。这对您是否有用取决于您。
由于您目前正在使用 Apache,除非您要迁移到 Nginx 并完全删除 Apache,否则我更倾向于将 Varnish 放在前面。对于您来说,Varnish 更像是一种嵌入式解决方案。如果您决定将来使用 ESI,则需要同时运行两者。
答案2
这里是对 Varnish、Nginx(冉冉升起的新星)、Apache Traffic Server(另一个代理缓存)、G-WAN(一个带有 C 脚本的应用服务器)和 Lighttpd(一个真正优秀的 web 服务器)的比较测试:
http://nbonvin.wordpress.com/2011/03/24/serving-small-static-files-which-server-to-use/
Apache Traffic Server 是由 Inktomi 创建的 HTTP 代理和缓存服务器,在 Inktomi 被雅虎收购之前作为商业产品发行。
Yahoo 表示,它使用 TS 每天处理超过 300 亿个对象。他们还表示,TS 是“数百年开发人员努力的成果”。