開始使用自訂VCL
Fastly支援自訂的Varnish Configuration Language (VCL)版本,以根據您的需求量身打造Fastly服務組態。
自訂VCL片段是新增至上傳至Adobe Commerce網站之使用中VCL版本之VCL邏輯的區塊。 自訂VCL程式碼片段會修改Fastly快取服務回應請求流量的方式。 例如,您可以新增自訂VCL程式碼片段,以允許僅來自指定使用者端IP位址的請求流量。 或者,建立程式碼片段以封鎖來自已知會傳送轉介垃圾郵件至您Adobe Commerce網站的流量。
自訂VCL程式碼片段(產生、編譯並傳輸到所有Fastly快取記憶體)載入並啟動,不會造成伺服器停機。
Fastly支援兩種型別的自訂VCL程式碼片段:
建議您搭配使用自訂VCL片段與Edge字典和存取控制清單(ACL),以儲存自訂程式碼所使用的資料。
字典和ACL資料會部署至可跨網路區域存取的Fastly Edge節點。 此外,資料可以跨網路動態更新,不需要您針對中繼或生產環境重新部署VCL程式碼。
教學課程
本教學課程和範例示範如何搭配使用一般的自訂VCL片段與Edge字典和Edge ACL,以自訂Adobe Commerce的Fastly服務設定。 如需更多詳細資訊,請參閱Fastly檔案:
- Fastly VCL指南 — 有關Fastly Varnish實作、Fastly VCL擴充功能的資訊,以及瞭解更多有關Varnish和VCL的資源。
- Fastly VCL參考 — 開發及疑難排解Fastly自訂VCL和自訂VCL片段的詳細程式設計參考。
您可以從Adobe Commerce管理員或使用Fastly API來建立和管理自訂VCL程式碼片段:
-
Adobe Commerce管理員 — 建議您使用Adobe Commerce管理員來管理自訂VCL片段,因為它會自動執行驗證、上傳並將VCL變更套用至Fastly服務設定的程式。 此外,您也可以從Admin檢視及編輯新增至Fastly服務組態的自訂VCL程式碼片段。
-
Fastly API — 如果您無法存取Admin,請使用Fastly API來管理自訂VCL片段。 例如,使用API在網站關閉時對Fastly服務設定進行疑難排解,或新增自訂VCL程式碼片段。 此外,部分作業只能使用API完成。 例如,您必須使用API來重新啟動較舊的VCL版本,或檢視指定VCL版本中包含的所有VCL片段。 請參閱VCL片段的API快速參考。
範例VCL程式碼片段
下列範例顯示依使用者端IP位址篩選流量的自訂VCL程式碼片段(JSON格式):
{
"service_id": "FASTLY_SERVICE_ID",
"version": "{Editable Version #}",
"name": "apply_acl",
"priority": "100",
"dynamic": "1",
"type": "hit",
"content": "if ((client.ip ~ {ACLNAME}) && !req.http.Fastly-FF){ error 403; }"
}
content
欄位中的VCL邏輯會執行下列動作:
-
檢查每個要求的傳入IP位址
client.ip
-
封鎖任何IP位址包含在 ACLNAME edge ACL中的要求,傳回
403 Forbidden
錯誤
下表提供自訂VCL程式碼片段之關鍵資料的詳細資訊。 如需更詳細的參考資料,請參閱Fastly檔案中的VCL程式碼片段參考資料。
API_KEY
active
true
或false
。 如果為true,則表示正在使用程式碼片段或版本。 使用其版本號碼來復製作用中的程式碼片段。content
number
priority
從1
到100
的數值,指定自訂VCL程式碼片段執行的時機。 優先順序值較低的程式碼片段會先執行。 如果未指定,priority
值會預設為100
。
任何優先順序值為5
的自訂VCL程式碼片段都會立即執行,最適合實作要求路由(封鎖和允許清單及重新導向)的VCL程式碼。 優先順序100
最適合覆寫預設VCL程式碼片段。
包含在Magento-Fastly模組中的所有預設VCL程式碼片段都有priority=50
。
- 指派高優先順序(例如
100
)在所有其他VCL函式之後執行自訂VCL程式碼,並覆寫預設VCL程式碼。
service_id
type
從管理員管理自訂VCL
您可以從Admin的 Fastly組態 > 自訂VCL片段 區段中新增自訂VCL片段。
自訂VCL程式碼片段 檢視只會顯示透過管理員新增的程式碼片段。 如果使用Fastly API新增程式碼片段,請使用該API來管理它們。
下列範例說明如何從管理員建立和管理自訂VCL程式碼片段,以及如何使用Fastly Edge模組和Edge字典:
使用API管理VCL
以下逐步說明如何使用Fastly API建立一般VCL程式碼片段檔案,並將其新增到您的Fastly服務設定中。 您可以從 終端機 應用程式建立和管理程式碼片段。 您不需要SSH連線至特定環境。
必要條件:
-
在雲端基礎結構環境中設定您的Adobe Commerce,以使用Fastly服務。 檢視設定Fastly。
-
取得Fastly API認證以驗證Fastly API的要求。 請務必取得正確環境的認證:測試或生產。
-
將Fastly服務認證儲存為bash環境變數,以便在cURL命令中使用:
code language-bash export FASTLY_SERVICE_ID=<Service-ID>
code language-bash export FASTLY_API_TOKEN=<API-Token>
匯出的環境變數僅可在目前的bash工作階段中使用,並在關閉終端機時遺失。 您可以匯出新值來重新定義變數。 若要檢視與Fastly相關的匯出變數清單:
code language-bash export | grep FASTLY
新增VCL程式碼片段
本教學課程提供使用Fastly API新增自訂程式碼片段的基本步驟。
必要條件
-
您的環境必須設定為使用Fastly CDN。 請參閱設定Fastly服務。
-
確保您執行的是Magento2適用的最新版Fastly CDN模組。 請參閱升級Fastly模組。
-
驗證Fastly服務的環境設定。 請參閱檢查Fastly快取。
-
您必須擁有管理員憑證才能存取測試環境和生產環境。
步驟1:找出作用中的VCL版本
使用Fastly API 取得版本作業來取得作用中的VCL版本號碼:
curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/active
在JSON回應中,請注意number
索引鍵中傳回的有效VCL版本號碼,例如"number": 99
。 當您複製VCL進行編輯時,需要版本號碼。
{
"testing": false,
"locked": true,
"number": 99,
"active": true,
"service_id": "872zhjyxhto5SIRb3GAE0",
"staging": false,
"created_at": "2019-01-29T22:38:53Z",
"deleted_at": null,
"comment": "Magento Module uploaded VCL",
"updated_at": "2019-01-29T22:39:06Z",
"deployed": false
}
將作用中的版本號儲存在Bash環境變數中,以用於後續API請求:
export FASTLY_VERSION_ACTIVE=<Version>
步驟2:復製作用中的VCL版本和所有片段
您必須先建立作用中VCL版本的復本進行編輯,才能新增或修改自訂VCL片段。 使用Fastly API 複製作業:
curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_VERSION_ACTIVE/clone -X PUT
在JSON回應中,版本編號會增加,active 索引鍵值為false
。 您可以在本機修改新的非作用中VCL版本。
{
"testing": false,
"locked": false,
"number": 100,
"active": false,
"service_id": "vW2bLFWhhto5SIRb3GAE0",
"staging": false,
"created_at": "2019-01-29T22:38:53Z",
"deleted_at": null,
"comment": "Magento Module uploaded VCL",
"updated_at": "2019-01-29T22:39:06Z",
"deployed": false
}
將新版本號儲存在bash環境變數中,以便用於後續命令:
export FASTLY_EDIT_VERSION=<Version>
步驟3:建立自訂VCL程式碼片段
使用下列內容和格式在JSON檔案中建立並儲存自訂VCL程式碼:
{
"name": "<name>",
"dynamic": "0",
"type": "<type>",
"priority": "100",
"content": "<code all in one line>"
}
值包括:
-
name
—VCL程式碼片段名稱。 -
type
— 指定插入產生的程式碼片段的位置,例如init
(在子常式上方)和recv
(在子常式內)。 如需這些值的詳細資訊,請參閱Fastly VCL程式碼片段物件值。 -
priority
— 一個從1
到100
的值,可決定自訂VCL程式碼片段執行的時機。 具有較低值的自訂VCL程式碼片段會先執行。來自Fastly VCL模組的所有預設VCL程式碼都有
50
的priority
。 如果您希望動作最後發生或覆寫預設VCL程式碼,請使用較高的數字,例如100
。 若要立即執行自訂VCL程式碼片段,請將優先順序設定為較低的值,例如5
。 -
content
— 要在一行中執行的VCL程式碼片段,沒有分行符號。 請參閱自訂VCL程式碼片段範例。
步驟4:將VCL程式碼片段新增至Fastly組態
使用Fastly API 建立程式碼片段作業,將自訂VCL程式碼片段新增至VCL版本。
curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_EDIT_VERSION/snippet -H 'Content-Type: application/json' -X POST --data @<filename.json>
<filename.json>
是您在上一步中準備的檔案名稱。 對每個VCL片段重複此指令。
如果您收到來自Fastly服務的500 Internal Server Error
回應,請檢查JSON檔案語法以確保您上傳的是有效的檔案。
步驟5:驗證並啟動自訂VCL程式碼片段
新增自訂VCL程式碼片段後,Fastly會將該程式碼片段插入您正在編輯的VCL版本中。 若要套用變更,請完成下列步驟以驗證VCL程式碼片段並啟動VCL版本。
-
使用Fastly API 驗證VCL版本作業來驗證更新的VCL程式碼。
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_EDIT_VERSION/validate
如果Fastly API傳回錯誤,請修正問題並再次驗證更新的VCL版本。
-
使用Fastly API 啟動作業來啟動新的VCL版本。
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_EDIT_VERSION/activate -X PUT
VCL片段的API快速參考
這些API請求範例使用匯出的環境變數來提供認證以使用Fastly進行驗證。 如需這些命令的詳細資訊,請參閱Fastly API參考。
-
取得使用中的VCL版本號碼
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/active
-
列出附加到服務的所有一般VCL程式碼片段
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_VERSION/snippet
-
檢閱個別程式碼片段
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_VERSION/snippet/<snippet_name>
<snippet_name>
是程式碼片段名稱,例如my_regular_snippet
。 -
更新程式碼片段
修改準備的JSON檔案,並傳送下列要求:
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_VERSION/snippet/<snippet_name> -H 'Content-Type: application/json' -X PUT --data @<filename.json>
-
刪除個別VCL程式碼片段
取得程式碼片段清單,並使用下列
curl
命令搭配特定程式碼片段名稱來刪除:code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_VERSION/snippet/<snippet_name> -X DELETE
-
以更新的值建立程式碼片段,並指派
100
的優先順序。