elgentos/magento2-varnish-extended

此包的最新版本(1.0.0)没有提供许可信息。

此扩展扩展了内置的Varnish功能

1.0.0 2024-09-19 13:32 UTC

This package is auto-updated.

Last update: 2024-09-19 13:36:28 UTC


README

本模块旨在为Magento中的Varnish功能添加一些额外功能。

可配置的跟踪参数

核心Magento VCL 包含硬编码的市场跟踪参数。 几乎没有人更改它们,但添加您网站上常用的跟踪参数可以大大提高命中率。

此扩展在后台添加了一个字段,在“商店”>“配置”>“系统”>“全页缓存”>“Varnish配置”>“跟踪参数”下,以自定义自己的参数。

重要提示:此操作不会自动应用!您需要使用自定义VCL并将营销GET参数部分替换为包含占位符的新部分;

您可以使用核心Magento VCL作为基础;

cp vendor/magento/module-page-cache/etc/varnish6.vcl custom-varnish6.vcl

或者使用本readme中“自定义优化VCL”子节中解释的自定义优化VCL;

现在将相关部分替换为包含占位符的这一部分;

    # Remove all marketing get parameters to minimize the cache objects
    if (req.url ~ "(\?|&)(/* {{ tracking_parameters }} */)=") {
        set req.url = regsuball(req.url, "(/* {{ tracking_parameters }} */)=[-_A-z0-9+(){}%.]+&?", "");
        set req.url = regsub(req.url, "[?|&]+$", "");
    }

然后,您需要生成新的VCL并应用它;

bin/magento varnish:vcl:generate --export-version=6 ---input-file=custom-varnish6.vcl -output-file=/data/web/varnish6.vcl
varnishadm vcl.load new-custom-vcl /data/web/varnish6.vcl
varnishadm vcl.use new-custom-vcl

检查Varnish命中率

建议在应用这些更改前后检查Varnish命中率,以便您可以看到命中率是否实际上有所提高。

wget --quiet https://raw.githubusercontent.com/olivierHa/check_varnish/master/check_varnish.py
chmod +x check_varnish.py
./check_varnish.py -f MAIN.cache_hit,MAIN.cache_miss -r

B2C商店的好命中率大约在80-90%左右。对于B2B,这可能会低一些,具体取决于您的目录有多封闭。

自定义优化VCL

鼓励您使用这里找到的自定义优化VCL; https://gist.github.com/peterjaap/006169c5d95eeffde3a1cc062de1b514

您可以将它放在您的Git仓库中的app/etc/varnish6.vcl,并通过以下Deployer任务在每个部署时自动应用它。

desc('Auto-apply VCL when custom VCL exists');
task('vcl:auto-apply', function () {
    if (test('[ -f {{release_path}}/app/etc/varnish6.vcl ]')) {
        $timestamp = date('YmdHis');
        run('{{bin/php}} {{release_path}}/bin/magento varnish:vcl:generate --export-version=6 --input-file={{release_path}}/app/etc/varnish6.vcl --output-file=/data/web/varnish6.vcl');
        run('varnishadm vcl.load vcl' . $timestamp . ' /data/web/varnish6.vcl');
        run('varnishadm vcl.use vcl' . $timestamp);
    }
})->select('stage=production');

与普遍看法相反,加载并激活(使用)新的VCL不会清除Varnish中已有的缓存对象。但是,新的VCL可能会改变处理未来请求的方式,这可能导致缓存项被更早地移除或以不同的方式检索。

显著差异

  1. VCL版本和兼容性
  • Magento VCL:为了兼容性使用vcl 4.0,即使使用Varnish版本6或7。
  • 优化VCL:使用vcl 4.1——一个更现代的版本——同时仍然与Varnish 6和7保持兼容。
  1. 请求处理(sub vcl_recv)
  • Magento VCL:侧重于请求归一化(删除营销参数,处理特定URL路径的缓存控制),但缺乏查询参数排序或更复杂的请求清理等改进。
  • 优化VCL:
    • 查询字符串优化:使用std.querysort()对查询参数进行排序,以提高缓存效率。
    • 删除空查询参数:消除用于归一化的空查询字符串。
    • 主机头清理:从主机头中删除端口号,以获得更好的缓存键归一化。
    • Httpoxy漏洞缓解:取消设置代理头以缓解潜在漏洞。
    • 健康后端宽限期:根据后端健康动态调整宽限期。
    • 高级查询参数删除:与原始的Magento VCL相比,删除更多与营销相关的查询参数,进一步优化缓存对象。
  1. Cookie和头部管理
  • Magento VCL:在cookie上使用std.collect(),但不会执行额外的cookie头部折叠或清理不必要的头部。
  • 优化VCL:合并多个Cookie头并移除代理等头信息,以实现更高效的处理和增强安全性。
  1. 缓存键生成(子vcl_hash)
  • Magento VCL:对某些请求头进行哈希处理,并应用于GraphQL和Magento的X-Magento-Vary Cookie,但结构化和逻辑整合还有提升空间。
  • 优化VCL:
    • 整合:通过确保使用X-Magento-Cache-Id或回退头信息(商店、内容货币)进行哈希处理,优雅地处理GraphQL请求和Magento缓存ID。
    • 通用安全:增加结构化逻辑进行SSL卸载,提高HTTPS处理和哈希键的完整性。
  1. 后端响应处理(子vcl_backend_response)
  • Magento VCL:
    • 基本TTL控制:缓存200和404响应,但以不太优化的方式清除Cookie。
    • Hit-For-Pass:当响应不可缓存时,实施基本的Hit-For-Pass策略。
  • 优化VCL:
    • 优雅和陈旧内容:保留陈旧内容最多3天,使用异步重新验证在继续提供已过期内容的同时刷新缓存。
    • Set-Cookie头:积极取消缓存内容的Set-Cookie(GET和HEAD请求),以提高缓存命中率。
    • 严格TTL控制:为不可缓存内容和不匹配的GraphQL缓存ID设置短(120秒)TTL,以避免过多的直接传递。
  1. 交付时的头部管理(子vcl_deliver)
  • Magento VCL:取消一系列头信息,如X-Magento-Tags、X-Powered-By和Server,但以基本形式包含调试信息。
  • 优化VCL:
    • 改进的调试:添加更具体的调试头(X-Magento-Cache-Debug),包括详细的缓存命中/未命中报告。
    • 更积极的头部清理:取消额外的头信息,如X-Varnish、Via和Link,以简化响应并减少发送给客户端的不必要数据。
  1. 安全增强
  • Magento VCL:通过移除敏感头信息实现基本安全,但缺乏更高级的威胁缓解。
  • 优化VCL:包含显式的X-Forwarded-Proto逻辑以实现HTTPS,更好的安全头部管理(例如,移除代理头),以及优化如移除HTTPoxy漏洞等。
  1. GraphQL请求处理
  • Magento VCL:仅缓存带有适当X-Magento-Cache-Id头的授权GraphQL请求,但哈希和缓存逻辑略低效。
  • 优化VCL:处理GraphQL缓存键的更简洁、更优化的逻辑,包括在X-Magento-Cache-Id未设置的情况下确保缓存键完整性的回退机制。
  1. 简化逻辑和性能改进
  • 优化VCL更为整洁,逻辑更集中,重复条件更少,性能增强更稳健(例如,cookie合并、更好的查询处理等)。它还引入了增强的调试功能和更细粒度的基于实时条件(如后端健康和动态宽限期)的缓存控制。

兼容性

至少需要Magento 2.4.7。