fastly/cdn

Fastly CDN 模块适用于 Magento 1.x

安装次数: 4,259

依赖者: 0

建议者: 0

安全: 0

星标: 26

关注者: 57

分支: 11

开放问题: 1

类型:magento-module

1.0.32 2021-04-13 13:36 UTC

README

FASTLY CDN FOR MAGENTO 文档

感谢您使用 "Fastly CDN 模块 for Magento"(FastlyCDN)。

本包包含您连接 fastly.com(Fastly)与您的 Magento 商业商店所需的一切,以及充分利用 Fastly 强大的缓存能力以实现高速电子商务网站所需的全部内容。FastlyCDN 模块已通过 Varnish Software 的架构认证,以确保为 Magento 商店提供最高质量和可靠性。FastlyCDN 模块主要由两个主要组件组成

FastlyCDN 模块基本上根据配置和访客会话设置正确的 Cache-Control 头,并为清除 Fastly 的缓存提供接口。

第二个组件,VCL,配置 Varnish 处理客户端请求和 Magento 的 HTML 响应,根据 FastlyCDN 模块添加到每个响应中的 Cache-Control 头。这是完整功能集所必需的。不上传 Fastly VCL 而启用 Fastly Magento 模块可能会导致页面不完整或页面无法正确缓存。

1. 前提条件

在安装 FastlyCDN 模块之前,您应该设置一个测试环境,因为您需要将 Fastly 设置在前面,这将需要一些时间来配置和测试。如果您直接将此解决方案部署到您的生产服务器,您可能会遇到可能影响您正常电子商务的问题。

确保您的 Magento Commerce 店铺在您的环境中运行正常,因为调试带有 Fastly 的 Magento 问题可能很困难。

FastlyCDN 支持从版本 1.7 开始的 Magento Community Edition 以及从版本 1.12 开始的 Magento Enterprise Edition。

您需要一个 fastly.com 账户。

2. 安装

本章节描述了 Magento 模块的安装以及您的 fastly.com 账户中的设置。

Magento 模块

安装 Magento 模块相当简单

  1. 将此存储库的 zip 存档下载到您的服务器上的临时位置,并解压缩。
  2. 将存档中的 app 目录的内容复制到您的 Magento 实例的 app 目录。
  3. 转到 Magento 后端,打开缓存管理(系统 -> 缓存管理),并刷新配置和布局缓存。
  4. 由于 Magento 的权限系统,请在继续下一步之前注销并重新登录。

如果您遇到任何无法轻松解决的严重问题,请转到 app/etc/modules,打开 "Fastly_CDN.xml",将 "active" 标签设置为 "false" 以停用 FastlyCDN 模块。如有必要,请再次清除 Magento 的缓存。

将 FastlyCDN 模块捆绑的 VCL 文件上传到您的 Fastly 服务。

使用 composer.json 安装

注意: Magento 1 默认不支持 composer,因为模块分散在多个目录中。但是,我们创建了一个解决方案,使用第三方扩展 magento-composer-installer。这使得 composer 能够使用此 modman 文件安装 Magento 模块,该文件定义了模块路径映射。

由于Magento 1没有自带composer.json文件,您需要手动在M1根目录下创建一个,内容如下:

{
    "require": {
        "fastly/cdn": "*"
    },
    "repositories": {
        "fastly-magento": {
            "type": "git",
            "url": "https://github.com/fastly/fastly-magento.git"
        }
    },
    "extra": {
        "magento-root-dir": "./",
        "magento-deploystrategy": "copy",
        "magento-force": true
    }
}

添加此文件后,您应该能够运行composer update来创建包含所需依赖项的/vendor文件夹,然后根据modman文件中的路径复制各种Fastly模块文件。

或者,您可以通过以下命令创建所需的composer.json

composer init
composer config repositories.fastly-magento git "https://github.com/fastly/fastly-magento.git"
composer config extra.magento-root-dir ./
composer config extra.magento-deploystrategy copy
composer config extra.magento-force true
composer require fastly/cdn

3. 配置

本节处理模块的不同配置选项,以及需要在服务器上配置的设置。

登录到您的Magento管理后台,前往

System > Configuration > Services > Fastly CDN

常规设置选项卡下,将启用缓存模块设置为,然后输入您的Fastly服务IDFastly API密钥

Choose Fastly

*要查找您的服务ID,请登录到Fastly仪表板,找到您的服务名称,然后单击显示服务ID链接。

Show Service Id

**要查找您的API密钥,请在Fastly仪表板中,从用户菜单中选择账户,然后滚动到页面底部。在账户API密钥区域中,单击显示按钮。

API key

您可以按下测试凭据按钮,以确保您已输入有效的凭据。

Test Credentials

如果您收到成功消息,请按下保存配置按钮。

Save config

最后一步是将VCL上传到Fastly。您可以通过按下上传VCL到Fastly按钮来完成此操作。

将弹出模态窗口,请确保勾选了上传后激活VCL,然后按下右上角的上传按钮。

VCL upload

上传过程完成后,模态窗口将自动关闭,并显示成功消息。

Success VCL

这就完成了,您已成功配置了您的Magento商店并使用Fastly CDN。

重要:如果您使用的是Magento企业版,确保在启用FastlyCDN模块之前禁用页面缓存。您可以在系统 > 缓存管理中完成此操作。

3.1 常规设置

在下述部分中,解释了Fastly CDN模块的配置选项。其中大多数可以在网站和商店视图级别进行更改,这允许为不同的商店前端进行精细配置。

在您的Magento后台中,前往系统 -> 配置 -> “服务”部分中的“Fastly CDN”并打开“常规设置”选项卡。

注意,如果您在此处更改了值,Fastly不会反映它,直到您清除其HTML对象或缓存对象的TTL过期。

启用缓存模块

此选项启用基本功能,如设置HTTP头,并允许在Magento缓存管理页面上进行缓存清理。此选项应全局设置为“是”,一旦您将您的商店域名之一指向Fastly服务,即使您希望禁用某些网站或商店视图的缓存(见下文选项)。在此完成之前,缓存行为可能不会按预期工作,并且缓存管理页面上的清理选项将不可用。

Fastly服务ID

输入与当前作用域连接的Fastly服务的服务ID。

Fastly API密钥

输入您的Fastly API密钥。

(如何查找这些信息的详细说明见(此处)[https://docs.fastly.com/guides/account-management-and-security/finding-and-managing-your-account-info])

禁用缓存

此选项允许您在Fastly中禁用每个Magento前端页面的缓存。这对于开发或测试很有用,通过不缓存所有请求而将所有请求传递给Fastly来实现。如果您在Magento Enterprise实例中有一个测试网站,请确保此网站的此选项设置为“是”。请求仍然会通过Fastly,但每个请求都会得到“private”的缓存控制,以防止缓存。

禁用路由缓存

某些控制器或操作在Magento中不得由Fastly缓存,因为响应将包含特定于用户的数据,或者请求可能会触发数据库(如API调用或支付回调)的更新。尽管Fastly传递所有POST请求(这些请求通常用于提交包含自定义信息的表单等),但您可以定义应在其HTTP响应头中设置“private”标志的控制器和操作。

注意:此功能依赖于Mage_Core_Controller_Varien_Action::getFullActionName()。

默认缓存TTL

Fastly在TTL(生存时间)值定义的一段时间内不会请求Web服务器或Magento来传递缓存的对象。您可以在商店视图级别调整您的商店页面的TTL,这允许您为您的前端页面设置不同的TTL。

注意,此字段仅允许以秒为单位的数值。它不支持在VCL中使用的相同表示法。“2h”(2小时)必须以“7200”秒输入。对于静态内容,Fastly使用VCL中vcl_fetch部分的默认TTL值(默认:set beresp.ttl = 3600s)。

过时内容交付时间

即使TTL已过期,Fastly也可以提供过时内容。在Fastly从Magento获取新鲜内容所需的时间内,它可以从其缓存中提供过时内容。此设置定义了在“正常”TTL过期后允许Fastly提供过时内容的时间(以秒为单位)。

后端错误时的过时内容交付时间

此设置定义了在后端宕机或无法正确响应的情况下,可以提供过时内容的时间(以秒为单位)。

路由的缓存TTL

此选项允许您根据每个Magento控制器/操作的TTL进行调整。要为路由添加新的TTL值

  1. 点击“添加路由”按钮
  2. 输入路由(例如:“CMS”,“catalog_product_view”);
  3. 以秒为单位输入路由的TTL(例如:“7200”)。

当未为给定路由定义TTL时,将使用“默认缓存TTL”值。

清除类别

此选项将类别(Fastly)缓存的自动清除与更新事件绑定。如果您始终想在前端显示最新的类别信息,请将选项值设置为“是”,并且每次类别更新时,类别缓存都会被失效。

清除产品

此选项将产品(Fastly)缓存的清除与产品和产品库存的更新绑定。如果设置为“是”,则每次产品更新或产品库存更新时,产品页面缓存都会被失效。

此外,如果“清除类别”选项设置为“是”,则在产品/产品库存更新时触发产品类别缓存清除。此选项在产品缺货(即客户购买的最后一件商品)时保持产品页面和类别信息最新很有用。

清除CMS页面

此选项将CMS页面(Fastly)缓存的自动清除与其更新事件绑定。如果设置为“是”,则每次CMS页面更新事件发生时(即通过Magento管理员更新CMS页面内容),CMS页面缓存都会被失效。

使用软清除

使用软清除不会立即从Fastly缓存中删除内容,而是将其标记为过时。与过时时间结合使用时,您的客户将很快收到过时内容,同时Fastly在后台更新内容。

调试

此选项允许一些X头通过。仅在开发或调试时使用。在生产系统上应将其设置为“否”。

3.2 ESI

边侧包含(ESI)在Varnish中实现,是W3C定义的一个子集(http://www.w3.org/TR/esi-lang),只支持esi:include和esi:remove。

启用ESI后,您的Magento安装将比仅运行在Fastly上更快。ESI用于缓存重复的片段(在Magento中称为块),并在不同的页面中重用它们。

3.2.1 表单密钥处理

与CE 1.8和EE 1.13版本一样,Magento在前端引入了表单密钥。表单密钥通过使用ESI块自动处理。

3.2.2 ESI块

FastlyCDN预先配置了这些块的ESI处理。

  • 顶部链接
  • 欢迎信息
  • 侧边栏/迷你购物车
  • 最近查看的产品
  • 最近比较的产品
  • 愿望单

要启用ESI功能,请转到系统 -> 配置 -> "服务"部分中的"Fastly CDN"并打开"ESI设置"选项卡。

MAGREO ENTERPRISE用户在启用ESI之前需要确保系统 -> 缓存管理中的"页面缓存"已被禁用。

3.2.3 ESI配置

默认ESI TTL

ESI块的默认TTL(秒)。这适用于下一节中未指定特定值的块。

块的ESI TTL

您可以通过设置特定于块的值来覆盖默认TTL。块名称必须与在app/code/community/fastly/CDN/etc中的config.xml文件中定义的标签名称匹配,在部分。

ESI严格渲染

当设置为"否"时,块逻辑简化以提高命中率。但是,内容可能略不同于原生的Magento块。这特别影响"最近查看的产品"和"最近比较的产品"块,它们原生前端会过滤查看或比较的产品列表。

ESI调试

启用标记以在前端识别ESI块。它还将每个块的内部ESI URL输出到调试中。

仅在测试环境中使用此功能。

3.3 GeoIP处理

GeoIP处理将根据客户端的IP地址获取其国家。此功能可用于自动将客户重定向到匹配其国家的商店,或显示对话框让他们自己选择所需的商店。

配置

要启用GeoIP处理,请转到系统 -> 配置 -> "FastlyCDN"并打开"GeoIP设置"选项卡,选择"启用GeoIP"并确保处于商店配置范围。

一般行为

在重定向后或在显示对话框后,模块将设置一个名为"FASTLY_CDN_GEOIP_PROCESSED"的cookie。

如果客户端设置了此cookie,则此模块将完全不起作用,因为我们假设客户要么看到了(可能还与之交互)弹出窗口,要么被自动重定向到了匹配的商店。

显示选择目标商店的对话框

当设置为"是"时,您的客户将看到一个对话框。当设置为"否"时,您的客户将被重定向。执行的操作取决于两个变量

  1. 当前商店
  2. 访问者的国家

要配置对话框或重定向URL,您必须切换到商店范围并为您要重定向/通知的国家添加映射。所有国家映射都使用ISO 3166-1-alpha-2代码。

静态CMS块的映射

对于您想要显示对话框的每个国家,您必须输入国家代码并选择要显示的静态CMS块。此模块附带预定义的CMS块作为您自定义开发的基线。可以通过编辑位于app/design/frontend/base/default/template/FastlyCDN/geoip/dialog.phtml的模板文件来自定义模态窗口。

该模块捆绑的CMS块名称以“Fastly CDN GeoIP对话框在...”开头。有英文版和德文版。为了让对话框正常工作,您必须将具有id“geoip-select”的选择标签中的“EN”(或“DE”)值替换为您希望客户重定向到的URI。

重定向映射

对于您想要重定向到特定商店的每个国家,您必须输入国家代码并选择目标商店。

您可以选择重定向或显示对话框。

防止重定向或显示静态块

如果访客的国家与当前商店相匹配,您可能不希望将客户重定向到另一个商店。为了防止重定向,您必须使用该商店的国家代码添加映射,并留空其他字段。这样,如果您的客户在“正确”的商店(基于国家),则不会触发基于GeoIP的操作。

4. 缓存清理、Purge请求

Fastly根据对象的TTL在一段时间内缓存对象。在此之后,将不会从Web服务器或Magento再次请求该对象。在TTL到期之前,无论在Magento或Web服务器的文件系统中发生什么变化,Fastly都将提供缓存的对象。要强制Fastly清理其缓存并再次从后端检索信息,您可以从Magento直接触发清除请求。

在Magento后端,转到系统 -> 缓存管理。如果您已在配置中启用了FastlyCDN模块,您将在“附加缓存管理”部分看到一个新按钮“清理Fastly CDN缓存”。

按内容类型清除

您可以通过单击“按内容类型清理Fastly CDN缓存”来根据其内容类型在Fastly缓存中清除对象。这允许您例如删除所有商店视图的CSS文件,如果它们已被修改,而无需使任何其他对象失效,这将节省在流量高的商店上的大量资源。

按商店清除

您可以通过单击“按商店清理Fastly CDN缓存”来根据商店在Fastly缓存中清除对象。这只会删除由Magento生成的内容。图像、CSS文件或JavaScript将不会被清除。

清除URI

您还可以使用“快速清除”清除单个URL(例如页面)。在“快速清除”按钮旁边的输入字段中输入所需的URL并按下它。如果URL有效,您将看到清除页面的成功消息。

清除所有

除了这些直接清除请求之外,FastlyCDN还有针对“刷新Magento缓存”和“刷新缓存存储”的观察器来清除Fastly中的所有对象以及刷新Magento缓存。它还有针对“刷新目录图像缓存”和“刷新JavaScript/CSS缓存”的观察器来清理与Fastly中相应的代理密钥匹配的对象。所有HTML对象也将被清除,因为当Magento再次生成时,产品图像和JavaScript/CSS路径将发生变化,因此缓存的HTML对象可能包含错误的路径,如果不刷新则可能不正确。您还可以启用在保存CMS页面、类别和产品时自动清除它们(请参阅配置)。如果您不希望在FastlyCDN模块的config.xml中注释掉这些观察器,则不要让它们自动执行操作。

5. VCL设计异常

默认情况下,Varnish在构建缓存对象时不会考虑请求的用户代理字符串。Magento设计异常使用正则表达式匹配不同的设计配置与用户代理字符串。为了使设计异常与Varnish一起工作,您必须在每次更新设计异常时更新Varnish VCL。

完成此操作最直接的方法是在更新您的“设计异常”后,在Fastly App服务配置页面上执行“清除所有”操作。但是,由于Varnish的可配置性,用户代理字符串的入站标准化可以作为一个高级配置。这种功能可以在您更新“设计异常”时更灵活地控制CDN缓存规则。

6. 故障排除

本节处理该模块的已知问题以及使用FastlyCDN的最佳实践。

6.1 已知问题

  • 在系统配置 -> 网络 -> 会话验证设置中,"前端使用SID"必须不设置为"是",否则会添加GET参数___SID,这将禁用所有缓存。
  • 在系统配置 -> 网络 -> 浏览器功能检测中,"禁用Cookies时重定向到CMS页面"必须关闭,因为由Fastly服务的访客在将某些内容放入购物车或登录之前不会获得cookie。
  • Magento中的日志和统计信息将是片段式的(Fastly不会将缓存请求传递到web服务器或Magento)。Fastly提供流式(访问日志)[https://docs.fastly.com/guides/streaming-logs/setting-up-remote-log-streaming],这可以替代使用。您可以使用基于JavaScript的统计信息,如Google Analytics,或使用Fastly的指标。
  • 同时运行FPC(Magento Enterprise Full Page Cache)和ESI会导致ESI不显示任何缓存块。要使用FastlyCDN与Magento Enterprise配合,您必须完全禁用FPC。
  • 在使用ESI时,确保包含要填充为包含片段的路径时禁用gzip。

6.2 防止自定义模块缓存

当使用不应缓存HTML输出的HTML输出自定义模块时,请确保将它们的控制器添加到“禁用路由缓存”配置中,以防止其输出的缓存。

6.3 防止缓存Magento之外的HTML/PHP文件

当使用Apache等Web服务器来处理Magento之外的资产和页面时,Fastly将尊重来自后端服务器的缓存信息,如:"Cache-Control: max-age=600"或"Expires: Thu, 19 Nov 2021 08:52:00 GMT"。这告诉Fastly一个请求是否可缓存以及缓存多长时间。确保您根据网站需求适当配置这些设置。

例如

如果您在Apache中安装了mod_expires,并在您的.htaccess中的默认设置“ExpiresDefault "access plus 1 year"”,这将允许Fastly缓存所有非Magento对象(例如js、media或skin文件夹中的文件)一年。然而,这也影响了未设置自己的"Cache-Control"或"Expires"头部的HTML或PHP文件。如果您不希望由Fastly缓存未经明确允许缓存的HTML内容,请将此行添加到您的.htaccess文件的mod_expires部分

ExpiresByType text/html A0

这将设置对象的过期时间与交付时间相同,这将不允许Fastly缓存对象。

请注意,如果HTTP响应头中已经设置了"Expires"头,则mod_expires将尊重它,并传递此头而无需更改。

6.4 User-Agent的Vary HTTP头

一些管理员在Magento的.htaccess文件中有这样一行

Header append Vary User-Agent env=!dont-vary

然而,这会强制Fastly的缓存为每个URL的每个用户代理字符串有一个缓存元素,这使得缓存几乎毫无用处。如果您感觉在一个浏览器中您的缓存是热的,而在另一个浏览器中Fastly没有缓存命中,请检查您的后端响应,并确保Vary头只像这样

Vary: Accept-Encoding