Fastly快取不適用於雲端基礎結構上的Adobe Commerce
本文針對Fastly快取無法在您的網站上運作的問題提供修正。 Fastly是一項CDN和快取服務,包含在Adobe Commerce的雲端基礎結構計畫和實作中。 若要驗證Fastly擴充功能是否正常運作或偵錯Fastly擴充功能,您可以使用curl命令來顯示特定回應標題。 這些回應標頭的值表示Fastly是否已啟用且正常運作。 您可以根據標頭的值和快取行為來進一步調查問題。
此資訊可協助您驗證和測試即時網站和來源伺服器的Fastly標題。
受影響的版本
- 雲端基礎結構上的Adobe Commerce
- Fastly 1.2.27及更高版本
問題
快取可能無法用於您的即時網站、生產或測試環境。
原因
通常,設定、不正確的憑證或不支援的Adobe Commerce擴充功能是Fastly快取無法運作的問題。 如果您設定Fastly不正確,或使用不支援的擴充功能來移除標題,Fastly快取將無法運作。
使用命令進行測試並檢查回應標題
使用dig命令進行測試
首先,使用dig命令檢查URL的標頭。 在終端機應用程式中,輸入dig <url>
以驗證Fastly服務是否顯示在標題中。 如需更多深入測試,請參閱Fastly的在變更DNS前的測試。
例如:
- 即時網站:
dig http[s]://<your domain>
- 正在暫存:
dig http[s]://staging.<your domain>.c.<instanceid>.ent.magento.cloud
- 生產:
dig http[s]://<your domain>.{1|2|3}.<project ID>.ent.magento.cloud
使用curl命令測試
接下來,使用curl命令來驗證XMagento標籤是否存在以及其他標頭資訊。 「測試」和「生產」的命令格式不同。
如需這些命令的詳細資訊,當您插入-H "host:URL"
時略過Fastly,將來源取代為連線位置(來自您的OneDrive試算表的CNAME資訊),-k
會忽略SSL,而-v
會提供詳細回應。 如果標題正確顯示,請檢查即時網站並再次驗證標題。
- 如果在直接繞過Fastly點選原始伺服器時發生標題問題,則您的程式碼、擴充功能或基礎結構可能會有問題。
- 如果您沒有遇到直接點選原始伺服器的錯誤,但標題缺少透過Fastly點選即時網域,則您可能會有Fastly錯誤。
首先,檢查您的 即時網站 以驗證回應標頭。 命令會通過Fastly擴充功能以接收回應。 如果您沒有收到正確的標頭,則應該直接測試原始伺服器。 此命令傳回Fastly-Magento-VCL-Uploaded
和X-Cache
標頭的值。
-
在終端機中,輸入以下命令以測試您的即時網站URL:
code language-none curl http://<live URL> -vo /dev/null -HFastly-Debug:1 [--resolve]
只有當您的即時URL未以DNS設定,而且您沒有靜態路由設定時,才使用
--resolve
。 例如:code language-none curl http://www.mymagento.biz -vo /dev/null -HFastly-Debug:1
-
驗證回應標頭以確保Fastly正常運作。 此命令的輸出類似於curl「暫存和生產」。 例如,您應該會看到此命令傳回的唯一標頭:
code language-none < Fastly-Magento-VCL-Uploaded: yes < X-Cache: HIT, MISS
若要測試 暫存:
curl http[s]://staging.<your domain>.c.<instanceid>.ent.magento.cloud -H "host: <url>" -k -vo /dev/null -HFastly-Debug:1
若要測試 生產負載平衡器:
curl http[s]://<your domain>.c.<project ID>.ent.magento.cloud -H "host: <url>" -k -vo /dev/null -HFastly-Debug:1
若要測試 生產原始節點:
curl http[s]://<your domain>.{1|2|3}.<project ID>.ent.magento.cloud -H "host: <url>" -k -vo /dev/null -HFastly-Debug:1
直接原始節點:
curl http[s]://<your domain>.{1|2|3}.<project ID>.ent.magento.cloud -H "host: <url>" -k -vo /dev/null -HFastly-Debug:1
例如,如果您有公用URL www.mymagento.biz,請輸入類似下列的命令以測試生產網站:
curl -k https://www.mymagento.biz.c.sv7gVom4qrpek.ent.magento.cloud -H 'Host: www.mymagento.biz' -vo /dev/null -HFastly-Debug:1
檢查回應標頭
- 檢查傳回的回應標題和值:
- Fastly-Magento-VCL-Uploaded應該存在
- 應該會傳回XMagento標籤
- Fastly-Module-Enabled應為Yes或Fastly擴充功能版本號碼
- X-Cache應為HIT或HIT, HIT
- x-cache-hits應為1,1
- Cache-Control: max-age應大於0
- Pragma應為快取
以下範例顯示Pragma、X-Module-Tags和Fastly-Module-Enabled的正確Magento。
curl指令的輸出可能會很長。 以下是僅供摘要參考的資訊:
* 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
解析
Fastly-Module-Enabled不存在
如果您在回應標題中未收到Fastly-Module-Enabled的「是」,則需要驗證Fasty模組是否已安裝及選取。
若要驗證已在測試和生產環境中啟用Fastly,請在Commerce管理員中檢查每個環境的設定:
-
使用包含/admin的URL (或已變更的管理員URL)登入Admin Console以進行測試和生產。
-
導覽至「商店>組態>進階>系統」。 捲動並按一下完整頁面快取。
-
確認已選取Fastly CDN。
-
按一下「Fastly設定」。 確保已輸入Fastly服務ID和Fastly API權杖(您的Fastly認證)。 確認您為測試環境和生產環境輸入的認證正確無誤。 按一下「測試認證」以取得協助。
-
編輯您的composer.json,並確保Fasty模組包含在版本中。 此檔案已列出所有模組及其版本。
- 在「需要」區段中,您應該有「fastly/magento2」:
<version number>
- 在「存放庫」區段中,您應該有:
code language-none "fastly-magento2": { "type": "vcs", "url": "https://github.com/fastly/fastly-magento2.git" }
- 在「需要」區段中,您應該有「fastly/magento2」:
-
如果您使用「組態管理」,則應該要有組態檔。 編輯app/etc/config.app.php (2.0, 2.1)或app/etc/config.php (2.2)檔案,並確定設定
'Fastly_Cdn' => 1
正確無誤。 設定不應為'Fastly_Cdn' => 0
(表示已停用)。如果您啟用Fastly,請刪除設定檔並執行bin/magento magento-cloud:scd-dump命令以進行更新。 如需逐步瞭解此檔案,請參閱組態指南中的管理系統特定設定的範例。
如果未安裝模組,您必須安裝在整合環境分支中,並部署至中繼和生產環境。 請參閱設定Fastly以取得雲端基礎結構指南中Commerce的指示。
Fastly-Magento-VCL-Uploaded不存在
在安裝與設定期間,您應該已上傳Fastly VCL。 這些是Fastly模組提供的基本VCL片段,不是您建立的自訂VCL片段。 如需相關指示,請參閱Commerce on Cloud Infrastructure指南中的上傳Fastly VCL程式碼片段。
X-Cache包含MISS
如果X-Cache為HIT、MISS或MISS、MISS,請再次輸入相同的curl命令,以確定最近沒有從快取中收回頁面。
如果您得到相同的結果,請使用curl命令並驗證回應標頭:
- Pragma是快取
- XMagento標籤已存在
- Cache-Control: max-age大於0
如果問題仍然存在,其他擴充功能可能會重設這些標題。 在測試中重複以下程式以停用擴充功能,找出導致問題的擴充功能。 找出導致問題的擴充功能後,您需要在「生產」中停用擴充功能。
- 若要停用擴充功能,請依照雲端基礎結構指南上Commerce的管理擴充功能區段中提供的步驟操作。
- 停用擴充功能後,請移至 System > Tools > Cache Management。
- 按一下 Flush Magento Cache。
- 現在一次啟用一個擴充功能,以儲存設定並排清快取。
- 請嘗試curl命令並驗證回應標頭。
- 重複步驟4和5以啟用和測試curl指令。 當Fastly標題不再顯示時,您發現擴充功能造成Fastly問題。
當您隔離重設Fastly標題的擴充功能時,請聯絡擴充功能開發人員以取得其他協助。 我們無法提供協力廠商擴充功能開發人員的修正或更新以搭配Fastly快取使用。