nexcess/magento-turpentine

Magento 的 Varnish 扩展程序。

安装次数 : 2,153

依赖项: 0

建议: 0

安全性: 0

星标: 519

关注者: 77

分支: 253

公开问题: 161

类型: magento-module

0.7.5 2018-11-21 17:34 UTC

README

Build Status Scrutinizer

Turpentine 是一个用于 Magento 的全页缓存扩展程序,它与 Varnish(一个非常快速的缓存反向代理)配合使用。默认情况下,Varnish 不缓存带有 cookie 的请求,而 Magento 会随每个请求发送 frontend cookie,导致 Varnish 缓存的命中率接近于零。Turpentine 配置 Varnish 以与 Magento 一起工作,并修改 Magento 的行为,以显著提高缓存命中率。

注意,尽管此扩展程序现在被认为是 稳定的,但由于可能需要为其他扩展程序添加的块添加自定义 ESI 策略,因此强烈建议在将它们部署到生产站点之前在开发/预发布站点上对其进行测试。

功能

  • 完整页面缓存,通过 Varnish ESI 和/或 AJAX 进行打孔,甚至对已登录访客也是如此
  • 可通过标准 Magento 方法配置(管理系统的配置和布局 XML),大多数情况下无需手动编辑 Varnish 配置
  • 能够动态生成并应用新的 Varnish VCL(配置),无需重新启动/更改 Varnish 的配置文件或刷新缓存
  • 通过 URL 或参数(SID、商店等)阻止缓存请求
  • 通过 URL 和单个块的 TTL 配置缓存 TTL
  • 支持多个 Varnish 实例进行集群使用
  • 在操作(如保存产品/目录/ CMS 页面后)上自动清除缓存
  • 支持非根 Magento 安装(即将 Magento 放在 /store/ 而不是 /)和多商店/多站点设置
  • 支持用于缓存预热站点的爬虫,并包括一个(基本的)内置站点爬虫
  • 通过 SSL 支持 通过 PoundNginx

要求

  • Magento Community Edition 1.6+ 或 Magento Enterprise Edition 1.11+
  • Varnish 2.1+(包括 3.0+)

安装 & 使用

请参阅 安装使用 页面。

支持

如果您遇到问题,请阅读 常见问题解答,然后在您仍然需要帮助的情况下,在 GitHub 的 问题跟踪器 中打开一个错误报告。

请勿使用 Magento Connect 的评论或(尤其是)问答来获取支持。我无法回复评论和问答的审核非常缓慢。

贡献

如果您为 Turpentine 提供了修复或功能,请通过 GitHub 向 devel 分支提交一个拉取请求。 master 分支仅用于稳定版本。请确保新代码遵循与现有代码相同的样式和约定。

它是如何工作的

扩展程序通过两部分工作,页面缓存和块(ESI/AJAX)缓存。让我们简要看一下它们是如何工作的

对于页面,Varnish 首先检查访问者是否发送了 frontend cookie。如果没有发送,Varnish 将为它们生成一个新的会话令牌。然后从缓存(如果不在缓存中则从后端获取)中提供页面,任何具有 ESI 策略的块通过 ESI 填充。请注意,对于被识别为爬虫的客户端,将跳过 cookie 检查(请参阅 爬虫 IP 地址爬虫用户代理 设置)。

对于块,扩展程序在 Magento 中监听 core_block_abstract_to_html_before 事件。当此事件被触发时,扩展程序会查看附加到该事件的块,如果为该块定义了 ESI 策略,则将块的模板替换为简单的 ESI(或 AJAX)模板,告知 Varnish 从另一个 URL 拉取块内容。然后 Varnish 向该 URL 发出另一个请求以获取该块的内容,该内容可以单独从页面缓存,并且可能因不同的访问者/客户端而异。

注意事项和限制

  • Turpentine 无法直接帮助 “添加商品到购物车” 或 “结账” 等操作的速度。它只能缓存,因此它只能提高网站浏览的速度。但它将大大减少后端的负载,因此对于高负载网站,它可以为后端资源释放足够的空间,从而对“操作”产生明显的影响。
  • 使用 Varnish 2.1.x 时存在一些技术限制:外部 ESI 请求不会被阻止,并且 ESI 策略中按块设置的 TTL 不受尊重(所有块都使用默认的 TTL)
  • Turpentine 的核心部分(缓存和 ESI/AJAX 注入)在 Magento CE 1.5 下运行,但由于事件名称的变化,大部分辅助功能无法工作。尽管如此,在了解它不受支持以及需要手动执行哪些操作的情况下,仍然可以使用 Turpentine 与 Magento CE 1.5 一起使用。需要注意的是,缓存刷新(自动和手动)和缓存预热(由于缺少触发缓存刷新的事件)都不工作。
  • 匿名块无法进行打孔。对于 CMS 页面,建议您将块包含在页面的布局更新 XML 中并为其命名,然后它可以像正常一样具有 ESI 策略。

已知问题

  • 日志和统计信息将显示所有请求都来自同一个 IP 地址(通常是 localhost/127.0.0.1)。应可以使用 Apache 的 mod_remoteipmod_rpaf 来解决这个问题。

演示

请参阅 演示网站 维基页面。

如果您在(生产网站)使用 Turpentine,请随意将您的网站添加到列表中!

许可证

代码根据 GPLv2+ 许可,其中大部分 ESI 特定代码取自 Hugues Alary 的 Magento-Varnish 扩展,该扩展许可为 GPLv3。