Fastly故障诊断

使用以下信息对云基础架构项目环境上的Adobe Commerce中用于Magento2的Fastly CDN模块进行故障诊断和管理。 例如,您可以调查响应标头值和缓存行为以解决Fastly服务和性能问题。

在Pro生产和暂存环境中,您可以使用New Relic日志查看和分析Fastly CDN和WAF日志数据,以排查错误和性能问题。

NOTE
有关设置和配置Fastly的信息,请参阅设置Fastly

找到Fastly服务ID

您需要Fastly服务ID才能从管理员配置Fastly或提交Fastly API请求以进行高级Fastly配置和故障排除。

如果您在项目环境中启用了Fastly,则可以从管理员处获取服务ID。 查看获取Fastly凭据

开发人员和高级VCL用户可以使用自定义VCL使用Fastly变量req.service_id检索服务ID。 例如,您可以将req.service_id添加到VCL中的自定义日志记录指令以捕获服务ID值:

log {"syslog"} req.service_id {" my_logging_endpoint_name :: "}

您可以对生产和暂存环境使用相同的VCL。 请参阅​ Fastly文档 ​中的vcl_log

站点性能、清除和缓存问题

使用以下列表可识别并解决与云基础架构环境中Adobe Commerce的Fastly服务配置相关的问题。

  • 商店菜单不显示或不起作用 — 您可能使用了直接指向原始服务器的链接或临时链接,而不是使用实时站点URL,或者您在cURL命令中使用了-H "host:URL"。 如果绕过Fastly到原始服务器,主菜单将不起作用,并且显示的标头不正确,这允许在浏览器端进行缓存。

  • 顶部导航不起作用 — 顶部导航依赖于Edge Side Include (ESI)处理,该处理在您上传默认MagentoFastly VCL代码段时启用。 如果导航不起作用,上传Fastly VCL并重新检查站点。

  • 地理位置/地理IP不起作用 — 默认MagentoFastly VCL代码段会将国家/地区代码附加到URL。 如果国家/地区代码不起作用,请上传Fastly VCL并重新检查网站。

  • 页面未缓存 — 默认情况下,Fastly不缓存标头为Set-Cookies的页面。 Adobe Commerce甚至在可缓存的页面上设置Cookie(TTL > 0)。 默认MagentoFastly VCL会删除可缓存页面上的这些Cookie。 如果页面未缓存,请上传Fastly VCL并重新检查站点。

    如果模板中的页面块被标记为不可缓存,也可能会发生此问题。 在这种情况下,问题很可能是由第三方模块或扩展阻止或删除Adobe Commerce标头导致的。 要解决此问题,请参阅X-Cache仅包含MISS,没有HIT

  • 清除请求失败 — 当您提交清除请求时,Fastly返回以下错误:

    code language-text
    The purge request was not processed successfully.
    

    此问题可能由以下任一问题引起:

    • 云基础架构项目环境上的Adobe Commerce的Fastly服务配置中的Fastly凭据无效
    • 自定义VCL代码片段中的代码无效

    要解决此问题,请参阅Adobe Commerce帮助中心的清除Cloud上的Fastly缓存时出错

来自Fastly的503错误

如果Fastly返回503超时错误,请检查错误日志和503错误页面以确定根本原因。

NOTE
如果在运行批量操作时发生超时,您可以延长管理员的Fastly超时

如果收到503错误,请检查生产或暂存环境错误日志和php访问日志以解决该问题。

检查错误日志

  • 错误日志

    code language-text
    /var/log/platform/<project-ID>/error.log
    

    此日志包含来自应用程序或PHP引擎的任何错误,例如memory_limitmax_execution_time exceeded错误。 如果未发现任何与Fastly相关的错误,请检查PHP访问日志。

  • PHP访问日志

    code language-text
    /var/log/platform/<project-ID>/php.access.log
    

    在日志中搜索返回503错误的URL的HTTP 200响应。 如果找到200响应,则表示Adobe Commerce返回页面时没有出现错误。 这表示在超过Fastly服务配置中设置的first_byte_timeout值的间隔之后可能发生问题。

当发生503错误时,Fastly在错误和维护页面上返回原因。 如果您为自定义响应页面添加了代码,则可能无法查看原因。 要查看默认错误页上的原因代码,您可以删除自定义错误页的HTML代码。

检查Fastly 503错误页

  1. 登录管理员。

  2. 单击​ 存储 > 设置 > 配置 > 高级 > 系统

  3. 在右窗格中,展开​ 全页缓存

  4. 在​ Fastly配置 ​部分中,展开​ 自定义合成页面,如下图所示。

    自定义503错误页

  5. 单击​ 设置HTML

  6. 删除自定义代码。 您可以将其保存在文本程序中,以便稍后添加回来。

  7. 单击​ 上传 ​将您的更新发送给Fastly。

  8. 单击页面顶部的​ 保存配置

  9. 重新打开导致503错误的URL。 Fastly返回一个错误页面,其原因如以下示例所示。

    Fastly错误

Apex和子域已与Fastly帐户关联

如果云基础架构项目上的Adobe Commerce的Apex域和子域已与一个分配了服务ID的现有Fastly帐户关联,则在更新Fastly配置之前,您无法启动:

验证或调试Fastly服务

您可以通过测试站点URL并检查响应中返回的标头值来排除云基础架构站点上Adobe Commerce的性能或缓存问题。

通过Fastly查看实时网站

使用Fastly API检查从实时站点返回的Fastly-Magento-VCL-UploadedX-Cache响应标头。

Fastly API请求通过Fastly扩展传递,以从源服务器获取响应。 如果响应返回不正确的标头,请直接测试原始服务器

检查响应标头

  1. 在终端中,使用以下curl命令测试您的实时网站URL:

    code language-bash
    curl https://<live URL> -vo /dev/null -H Fastly-Debug:1
    

    如果尚未设置静态路由或完成实时站点上域的DNS配置,请使用--resolve标志,该标志绕过DNS名称解析。

    code language-bash
    curl -svo /dev/null --resolve '<your_hostname>:443:<IP-address-of-cache-node>' <https-URL>
    
    note note
    NOTE
    要将此命令与--resolve选项一起使用,您必须通过SSL/TLS证书启用Fastly的TLS并查找缓存节点的IP地址。
  2. 在响应中,验证标头以确保Fastly正常工作。 您应在响应中看到以下唯一标头:

    code language-http
    < Fastly-Magento-VCL-Uploaded: yes
    < X-Cache: HIT, MISS
    

如果标头没有正确的值,请参阅以下信息:

绕过Fastly缓存检查Adobe Commerce站点

如果Fastly服务返回错误的标头,您可以创建一个VCL代码片段,该代码片段允许您提交绕过Fastly缓存的请求。 请参阅绕过Fastly缓存

添加VCL代码段后,使用cURL命令将请求从指定的IP地址提交到原始服务器。 然后,检查响应中是否有错误。

检查缓存命中和未命中响应标头

验证返回的响应是否包含以下信息:

  • 包含X-Magento-Tags标头

  • Fastly-Module-Enabled标头的值为Yes或项目环境中安装的CDNMagento2模块的Fastly的版本号

  • Cache-Control: max-age大于0

  • Pragma设置是cache

以下cURL命令输出摘录显示PragmaX-Magento-TagsFastly-Module-Enabled标头的正确值:

* STATE: INIT => CONNECT handle 0x600057800; line 1402 (connection #-5000)
* Rebuilt URL to: https://www.mymagento.biz.c.sv7gVom4qrpek.ent.magento.cloud/
* Added connection 0. The cache now contains 1 members
* Trying 192.0.2.31...
* STATE: CONNECT => WAITCONNECT handle 0x600057800; line 1455 (connection #0)

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Connected to www.mymagento.biz.c.sv7gVom4qrpek.ent.magento.cloud (54.229.163.31) port 443 (#0)

* STATE: WAITCONNECT => SENDPROTOCONNECT handle 0x600057800; line 1562 (connection #0)
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* ALPN, offering h2

... portion omitted for brevity ...

< Set-Cookie: mage-messages=%5B%5D; expires=Wed, 22-Nov-2017 17:39:58 GMT; Max-Age=31536000; path=/
< Pragma: cache
< Expires: Wed, 23 Nov 2016 17:39:56 GMT
< Cache-Control: max-age=86400, public, s-maxage=86400, stale-if-error=5, stale-while-revalidate=5
< X-Magento-Tags: cb_welcome_popup store cb cb_store_info_mobile cb_header_promotional_bar cb_store_info cb_discount-promo-bar cpg_2 cb_83 cb_81 cb_84 cb_85 cb_86 cb_87 cb_88 cb_89 p5646 catalog_product p5915 p6040 p6197 p6227 p7095 p6109 p6122 p6331 p7592 p7651 p7690
< Fastly-Module-Enabled: yes
< Strict-Transport-Security: max-age=31536000
    < Content-Security-Policy: upgrade-insecure-requests
    < X-Content-Type-Options: nosniff
    < X-XSS-Protection: 1; mode=block
    < X-Frame-Options: SAMEORIGIN
    < X-Platform-Server: i-dff64b52
    <
    * STATE: PERFORM => DONE handle 0x600057800; line 1955 (connection #0)
    * multi_done
      0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0
    * Connection #0 to host www.mymagento.biz.c.sv7gVom4qrpek.ent.magento.cloud left intact
NOTE
有关命中和未命中的详细信息,请参阅Fastly文档中的了解具有屏蔽服务的缓存命中和未命中的标头

解决在响应标头中发现的错误

此部分提供有关解决在使用Fastly API检查响应标头时返回的错误的建议。

未启用Fastly模块

如果未启用Fastly模块(Fastly-Module-Enabled: no)或缺少标头,请使用SSH登录项目。 然后,运行以下命令以检查模块状态。

php bin/magento module:status Fastly_Cdn

根据返回的状态,使用以下说明更新Fastly配置。

  • Module does not exist — 如果该模块不存在,请在集成分支中安装和配置Magento2的Fastly CDN模块。 安装完成后,启用并配置模块。 查看设置Fastly

  • Module is disabled — 如果Fastly模块被禁用,请更新本地环境中integration分支上的环境配置以启用它。 然后,将更改推送到暂存和生产环境。 请参阅管理扩展

    如果您使用配置管理,请先检查app/etc/config.php配置文件中的Fastly CDN模块状态,然后再将更改推送到生产或暂存环境。

    如果未在config.php文件中启用该模块(Fastly_CDN => 0),请删除该文件并运行以下命令以使用最新的配置设置更新config.php

    code language-bash
    bin/magento magento-cloud:scd-dump
    

Fastly VCL尚未上传

如果尚未上传Fastly VCL (Fastly-Magento-VCL-Uploadedfalse),请使用Admin中的​ 上传VCL ​选项进行上传。 查看上传Fastly VCL代码片段

X-Cache只包含MISS,没有HIT

如果X-Cache标头包含HITHIT, HITHIT, MISS),则表示Fastly已成功返回缓存的内容。

如果X-Cache标头为MISS, MISS且不包含HIT,请再次运行curl命令以确保该页面最近未从缓存中清除。

如果获得相同的结果,请使用curl命令并验证响应标头

  • Pragmacache
  • X-Magento-Tags已存在
  • Cache-Control: max-age大于0

如果问题仍然存在,则其他扩展可能会重置这些标头。 在暂存环境中重复以下过程,方法是禁用所有扩展并重新启用每个扩展,以确定哪个扩展正在重置标头。 确定导致问题的扩展后,必须在生产环境中禁用它。

要识别重置响应标头的扩展,请执行以下操作:

  1. 登录管理员。

  2. 导航到​ 商店 > 设置 > 配置 > 高级 > 高级

  3. 在右窗格的​ 禁用模块输出 ​部分中,查找并禁用所有扩展。

  4. 单击​ 保存配置

  5. 单击​ 系统 > 工具 > 缓存管理

  6. 单击​ 刷新Magento缓存

  7. 对每个扩展完成以下步骤,这可能会导致Fastly标头问题:

    • 一次启用一个扩展,保存配置并刷新Adobe Commerce缓存。

    • 运行curl命令以验证响应标头

    对每个扩展重复此过程。 如果不再显示Fastly响应标头,则表明您已经发现了导致Fastly问题的扩展。

在识别正在重置Fastly标头的扩展后,请与扩展开发人员联系以获取其他帮助。 我们无法提供修复或更新以使第三方扩展与Fastly缓存配合使用。

回滚Fastly配置

如果自定义VCL代码片段更新或其他Fastly配置更改导致云基础架构网站上的Adobe Commerce中断或返回错误,请使用Fastly API activate命令回滚到早期的VCL版本。 您无法从Admin回滚VCL版本。

要回滚VCL版本

  1. 要获取服务的可用VCL版本列表,请运行以下命令

    code language-bash
    curl -H "Fastly-Key: <FASTLY_API_TOKEN>" -H "Accept: application/json" https://api.fastly.com/service/<FASTLY_SERVICE_ID>/version
    
  2. 运行以下命令将活动VCL版本更改为指定版本。

    code language-bash
    curl -H "Fastly-Key: <FASTLY_API_TOKEN>" -H "Content-Type: application/x-www-form-urlencoded" -H "Accept: application/json" -X PUT https://api.fastly.com/service/<FASTLY_SERVICE_ID>/version/<VERSION_ID>/activate
    

有关使用Fastly API查看和管理VCL的详细信息,请参阅使用API管理VCL

recommendation-more-help
05f2f56e-ac5d-4931-8cdb-764e60e16f26