我在Unicorn上部署了一个生产Rails应用程序,前面有Nginx用于静态文件服务.我现在需要一些Varnish的功能,我想知道如何介绍它.
有些人把Varnish放在前面而有些人把Nginx放在前面.我没有听说有人只使用Varnish和Unicorn,但我认为它是有效的.
前面有Nginx的人似乎正在为gzip和SSL终止这样做. SSL与我的应用程序无关,但gzip是.我觉得清漆很快就会出现,所以为了简单起见,我可以在一段时间内生活.
这两种方法都有其他优点/缺点吗?是否有规范的最佳实践布局?
最佳答案
Heroku(例如)可能因为你提到的原因而放了nginx in front of varnish.
原文链接:https://www.f2er.com/nginx/435261.html所以,Nginx – >清漆 – >应用服务器.
在我的工作中,我们在所有东西(清漆 – > Nginx – > apache / wsgi)前使用Varnish,它的效果非常好.我们认为,如果有缓存命中,则从堆栈的最高点开始提供.但是有一些怪癖. VCL非常特定于其任务,因此使得Nginx可以很容易地处理重定向(例如,用于移动检测)等事情变得有点困难.一般来说,它只是不那么灵活,因为它不是它的意图.
一般来说,根据我的阅读(并根据我的工作经验),最好将Nginx放在堆栈前面,并在它和你的app服务器之间涂上清漆.
使用Unicorn时这种方法的一个缺点是你将无法使用unix socket方法与Nginx和unicorn,因为你必须在两者之间点击清漆,而varnish不支持它们.这可能是一件小事.
更新:有一些额外的,更具体的理由选择一个,请查看this answer’s comments.这取决于您是否需要SSL,ESI和gzip压缩.