我有一个在 Ruby on Rails 上运行的大部分静态站点,它使用 Varnish 反向代理缓存来节省对 Rails 后端的点击。
问题是用户可以登录网站,当他们登录时,我们使用 ESI(边缘包括)来显示页面的用户特定部分。
使用 ESI 意味着我们必须在 Rails 后端禁用 Gzip 压缩(使用 Nginx+passenger),否则 varnish 无法解析从后端返回的数据以运行 ESI 处理。
我的问题是,使用反向代理缓存的好处是否超过了压缩所有内容的好处?还是我应该尝试完全摆脱 ESI 并拥有两全其美的优势?
如果你安排这样的事情,你可以两全其美:
用户 -> nginx -> Varnish -> Rails
打开从 nginx 到用户的 gzip 压缩。这是最慢的部分,也是最昂贵的部分。我假设您的 nginx、Varnish 和 Rails 实例是彼此本地的。您的本地带宽应该绰绰有余。此外,仅使用 gzip 解压缩以组装 ESI 并没有太大意义。
如果带宽不是问题,并且加载时间在没有 gzip 的情况下是可以接受的,那么您绝对应该关闭 gzip。
Gzipping 会占用大量 CPU 资源。因此,如果您更关心 CPU 而不是带宽,如果站点加载速度足够快,并且如果 ESI 对您有很大帮助,那么反向代理缓存系统肯定比 gzip 压缩 http 响应具有更多好处。
在其他情况下,带宽很重要,gzip 可能更重要,但这里似乎并非如此。
最后,gzipping 可以通过一些反向代理来完成。这是一个很大的可能性,因为反向代理通常不会使用太多 CPU(如果它们在单独的服务器上)。这为后端节省了大量的 CPU 周期,也节省了带宽,但目前,如果我没记错的话,Varnish 不支持 gzipping。