Gzip与反向代理caching

我在Ruby on Rails上运行了大多数静态站点,它使用Varnish反向代理caching来保存命中Rails后端。

问题是,用户可以login到网站,当他们这样做,我们使用ESI(边缘包括)来显示用户特定的页面部分。

使用ESI意味着我们必须在Rails后端禁用Gzip压缩(使用Nginx + passenger),否则varnish不能parsing从后端返回的数据以运行ESI处理。

我的问题是,使用反向代理caching的好处是否超过了gzip所有内容的好处? 还是应该尝试摆脱ESI完整,并有两全其美?

如果你安排这样的事情,你可以得到两全其美:

用户 – > nginx – > Varnish – > Rails

将gzip压缩从nginx转换为用户。 这是最慢的部分,也是最昂贵的。 我假设你的nginx,Varnish和Rails实例是彼此本地的。 您的本地带宽应该绰绰有余。 除了解压缩来组装ESI之外,没有太多的意义。

如果带宽不是问题,并且没有gzip的情况下加载时间是可以接受的,那么你一定要把gzip关掉。

Gzipping需要大量的CPU资源。 所以,如果你更关心CPU而不是带宽,如果站点加载速度够快,并且ESI对你有很大的帮助,那么反向代理caching系统肯定比gzipping http响应更有好处。

在其他情况下,带宽至关重要,gzip可能更重要,但在这里似乎并不是这样。

最后,gzip可以通过一些反向代理来完成。 这是一个很大的可能性,因为反向代理通常不会使用太多的CPU(如果他们在一个单独的服务器上)。 这为后端节省了大量的CPU周期,并节省了带宽,但目前,如果我没有记错的话,Varnish不支持gzip。