添加反向代理 - nginx 或 varnish

Chr*_*ams 5 nginx varnish apache-2.2

我们目前通过 Apache 和 Apache 乘客为我们的大部分 Rails 和 LAMP 应用程序提供服务,但我们正在考虑添加 Nginx 或 Varnish 作为反向代理,以在一定程度上减少我们服务器上的负载。

我知道您可以同时使用 Varnish 和 Nginx,但鉴于在学习两者如何工作方面需要投入时间,并且我们希望在可能的情况下尽可能减少基础设施中“移动部件”的数量,我我试图找出使用以下方法的优缺点:

  • nginx 本身作为反向反向代理/缓存
  • 单独清漆作为反向代理/缓存
  • nginx 和清漆一起使用

我知道 nginx 以非常快的速度着称,并且随着它变得越来越流行,它作为一个成熟的 http 服务器越来越突出,所以我可以看到投入一些时间来学习该服务器如何工作的论点,但 Varnish 仍然是一个未知数我。

如果 nCache 现在在 Nginx 中,我为什么要使用 Varnish?

谢谢

kar*_*ore 1

您预计使用 Edge Side Includes (ESI) 吗?如果是这样,则 Nginx ESI 模块已损坏并且存在一些未解决的错误。如果您使用 Varnish,输出不会被压缩,因此您在使用 Nginx 来压缩启用 ESI 的页面时会遇到一些困难。当我使用 Python 框架时,Rails 是类似的。

根据您当前的设置,您可以执行以下操作:

Nginx -> Apache -> Passenger -> Rails Varnish -> Apache -> Passenger -> Rails

两者都会出现在您现有系统的前面。使用 Nginx,您还可以让它直接访问静态文件,并允许它为这些文件提供服务,而无需通过 Apache 代理。使用 Location 指令,您可以分割部分网络空间并防止其必须通过代理。

但是,如果您想完全迁移到 Nginx,您的基础架构将变为:

nginx->乘客->rails(nginx->uwsgi->python)

如果你添加清漆,你最终会得到:

清漆 -> nginx -> 乘客 -> Rails

除非您使用 ESI,在这种情况下您最终会得到:

nginx->清漆->nginx->乘客->rails

在某些时候,从混合物中去除清漆变得非常有趣。然而,最近的 Varnish 版本仍然比 Nginx 的缓存更快,并且您对缓存的方式有很多控制权。虽然 Nginx 和 Varnish 都为您提供了相当多的控制权,但 Varnish 的 VCL 允许您编写 C 代码来完成两者都无法开箱即用的操作,而无需触及守护程序的源代码。这对你是否有用取决于你。

由于您目前正在使用 Apache,所以我更倾向于将 Varnish 放在前面,除非您打算迁移到 Nginx 并完全删除 Apache。在您的情况下,清漆更像是一种即插即用的解决方案。如果您决定将来要使用 ESI,则需要同时运行两者。