Varnish 通常位于 Rails Web 堆栈的哪里?

Varnish 通常位于 Rails Web 堆栈的哪里?

我在 Unicorn 上部署了一个生产 Rails 应用程序,前端使用 nginx 提供静态文件服务。我现在需要 Varnish 的一些功能,不知道如何引入它。

有些人把 Varnish 放在前面,而其他人把 nginx 放在前面。我还没听说有人用只是Varnish 和 Unicorn,但我想它是有效的。

那些在前面使用 nginx 的人似乎是为了 gzip 和 SSL 终止而这样做的。SSL 与我的应用程序无关,但 gzip 与之相关。我认为 Varnish 很快就会得到它,所以为了简单起见,我可以暂时不用它。

这两种方法还有其他优点/缺点吗? 有没有规范的最佳实践布局?

答案1

Heroku(例如)varnish 前面是 nginx可能就是因为你提到的原因。

因此,nginx -> varnish -> 应用服务器。

在我的工作中,我们在一切工作之前都使用 Varnish(varnish -> nginx -> apache/wsgi),它工作得很好。那里的想法是,如果缓存命中,则从堆栈中的最高点提供服务。不过也有一些怪癖。VCL 非常专注于其任务,因此很难执行诸如重定向之类的操作(例如,用于移动检测),而 nginx 可以轻松处理这些操作。总的来说,它的灵活性稍差一些,因为这不是它本来应该做的事情。

一般来说,从我读过的内容(以及根据我的工作经验)来看,最好将 nginx 放在堆栈前面,并将 varnish 放在它和应用服务器之间。

使用 Unicorn 时,这种方法的一个缺点是,您将无法在 nginx 和 unicorn 中使用 unix 套接字方法,因为您必须在两者之间使用 varnish,而 varnish 不支持它们。不过,这可能是一件小事。

更新:有关选择其中一个的更多、更具体的理由,请查看这个答案的评论。这取决于您是否需要 SSL、ESI 和 gzip 压缩。

相关内容