我正在考虑新 Web 服务器的架构。将 Varnish 作为 Nginx 前面的缓存用作反向代理,并将静态文件放在 apache 前面以处理所有繁重的工作,这是一个好主意吗?
我将运行 php 和 ruby on rails 应用程序。
通过另外两个进程将 php 请求传递给 apache 的开销是否会太多?
多谢!
答案1
是的,这是有效的。我个人的方法是先使用 Varnish,然后使用 VCL 将流量在静态 NGINX 请求和您的繁重工作之间进行分配(无论是 Apache 还是 Passenger 或......这都无关紧要)。如果是在同一台机器上,因为您不需要额外的开销。它不一定能为您带来任何东西。
答案2
Varnish 尚不支持 gzip 压缩,因此,最好将其与前面的 nginx 交换,以压缩 varnish 发回的内容。由于 varnish 和 nginx 不会争夺相同的资源(nginx 使用 CPU 进行 gzip 压缩,而 varnish 使用内存),因此它们应该可以在同一台机器上顺利运行。
立即上漆支持gzip压缩,所以除非您需要 SSL 终止(如评论中所建议),否则我建议将 varnish 直接与互联网接触。
对于 http:
(互联网)-->(varnish、gzip、缓存、esi)-->(应用程序)
对于 https:
(互联网)-->(nginx,ssl)-->(varnish,gzip,缓存,esi)-->(应用程序)
如果你也想让 apache 也加入其中(为了获得无处不在的 mod_foobar 支持),我会把它放在 varnish 和应用程序之间
更新:已更新,在 varnish 3.0 中包含 gzip 支持。根据评论中的建议添加了 ssl / esi
答案3
开销不应该很大。我假设您想要拥有这两个层的部分原因是为了可扩展性;在这种情况下,您很可能会看到,相对于 apache,varnish 和 nginx 的工作效率并不高。
如果您将所有三个层级都放在一台机器上,则在达到服务器本身的容量之前,性能影响会较小。
作为替代方案,为什么不使用 varnish + nginx 和 Passenger?我过去曾使用过这种设置,使用 Passenger 的 nginx 相对较轻,而且运行良好。如果您还没有完全依赖 apache 来运行您的 rails 堆栈,那么可能值得考虑。
答案4
我在 Apache+PHP+MySQL 服务器上运行带有 boost 模块的 Drupal,但在它们前面我使用启用了 gzip-static 功能的 Nginx,并使用 boost 的结果为用户提供服务。
最重要的是,我在同一台电脑上使用清漆,效果很好。
我还使用 Nginx 来调整 Drupal 在缓存方面做得不太好的标头。