開始使用自訂VCL

Fastly支援自訂的Varnish Configuration Language (VCL)版本,以根據您的需求量身打造Fastly服務組態。

自訂VCL片段是新增至上傳至Adobe Commerce網站之使用中VCL版本之VCL邏輯的區塊。 自訂VCL程式碼片段會修改Fastly快取服務回應請求流量的方式。 例如,您可以新增自訂VCL程式碼片段,以允許僅來自指定使用者端IP位址的請求流量。 或者,建立程式碼片段以封鎖來自已知會傳送轉介垃圾郵件至您Adobe Commerce網站的流量。

自訂VCL程式碼片段(產生、編譯並傳輸到所有Fastly快取記憶體)載入並啟動,不會造成伺服器停機。

NOTE
將自訂VCL程式碼、邊緣字典和ACL新增到Fastly模組組態之前,請先確認Fastly快取服務可搭配預設組態運作。 請參閱設定Fastly服務

Fastly支援兩種型別的自訂VCL程式碼片段:

  • 一般程式碼片段 — 自訂一般VCL程式碼片段會針對特定VCL版本進行編碼。 您可以從Admin或Fastly API建立、修改和部署一般VCL程式碼片段。

  • 動態代碼片段 — 使用Fastly API建立的VCL代碼片段。 您可以修改和部署動態程式碼片段,而無需更新服務的Fastly VCL版本。

建議您搭配使用自訂VCL片段與Edge字典和存取控制清單(ACL),以儲存自訂程式碼所使用的資料。

  • Edge字典 — 將資料以索引鍵值配對的形式儲存在字典容器中,以便從自訂VCL程式碼片段參照

  • Edge ACL — 儲存使用者端IP位址資料,該資料會定義使用自訂VCL片段實作的區塊或允許規則的存取控制清單

字典和ACL資料會部署至可跨網路區域存取的Fastly Edge節點。 此外,資料可以跨網路動態更新,不需要您針對中繼或生產環境重新部署VCL程式碼。

NOTE
如果您已針對該環境設定Fastly服務,則只能將自訂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; }"
}
WARNING
在此範例中,VCL程式碼會格式化為JSON裝載,且可以儲存至檔案並以Fastly API請求提交。 若要防止在針對API請求以JSON形式傳送程式碼片段時發生JSON驗證錯誤,請使用反斜線將程式碼中的特殊字元逸出。 請參閱Fastly VCL檔案中的使用動態VCL片段。 如果您從「管理員」提交VCL程式碼片段,就不必逸出特殊字元。

content欄位中的VCL邏輯會執行下列動作:

  • 檢查每個要求的傳入IP位址client.ip

  • 封鎖任何IP位址包含在​ ACLNAME edge ACL中的要求,傳回403 Forbidden錯誤

下表提供自訂VCL程式碼片段之關鍵資料的詳細資訊。 如需更詳細的參考資料,請參閱Fastly檔案中的VCL程式碼片段參考資料。

說明
API_KEY
用於存取您的Fastly帳戶的API金鑰。 請參閱取得認證
active
程式碼片段或版本的作用中狀態。 傳回truefalse。 如果為true,則表示正在使用程式碼片段或版本。 使用其版本號碼來復製作用中的程式碼片段。
content
要執行的VCL程式碼片段。 Fastly並不支援所有VCL語言功能。 此外,Fastly還提供具有自訂功能的擴充功能。 如需支援功能的詳細資訊,請參閱Fastly VCL程式設計參考
dynamic
程式碼片段的動態狀態。 傳回Fastly服務組態之版本化VCL中所包含的一般程式碼片段false。 傳回動態程式碼片段true,不需要新的VCL版本即可修改和部署。
number
包含程式碼片段的VCL版本號碼。 Fastly在其範例值中使用​ 可編輯版本#。 如果您從API新增自訂程式碼片段,請在API請求中包含版本號碼。 如果您從「管理員」新增自訂VCL,則會為您提供版本。
priority

1100的數值,指定自訂VCL程式碼片段執行的時機。 優先順序值較低的程式碼片段會先執行。 如果未指定,priority值會預設為100

任何優先順序值為5的自訂VCL程式碼片段都會立即執行,最適合實作要求路由(封鎖和允許清單及重新導向)的VCL程式碼。 優先順序100最適合覆寫預設VCL程式碼片段。

包含在Magento-Fastly模組中的所有預設VCL程式碼片段都有priority=50

  • 指派高優先順序(例如100)在所有其他VCL函式之後執行自訂VCL程式碼,並覆寫預設VCL程式碼。
service_id
適用於特定測試或生產環境的Fastly服務ID。 將您的專案新增至雲端基礎結構Fastly服務帳戶上的Adobe Commerce時,就會指派此ID。
type
指定插入產生的程式碼片段的位置,例如init (在子常式上方)和recv (在子常式內)。 如需詳細資訊,請參閱Fastly VCL程式碼片段參考。

從管理員管理自訂VCL

您可以從Admin的​ Fastly組態 > 自訂VCL片段 ​區段中新增自訂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新增自訂程式碼片段的基本步驟。

NOTE
若要瞭解如何從Adobe Commerce Admin管理自訂VCL片段,請參閱從Adobe Commerce Admin管理VCL

必要條件

  • 您的環境必須設定為使用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程式碼片段名稱。

  • dynamic — 指出這是一般程式碼片段還是動態程式碼片段

  • type — 指定插入產生的程式碼片段的位置,例如init (在子常式上方)和recv (在子常式內)。 如需這些值的詳細資訊,請參閱Fastly VCL程式碼片段物件值

  • priority — 一個從1100的值,可決定自訂VCL程式碼片段執行的時機。 具有較低值的自訂VCL程式碼片段會先執行。

    來自Fastly VCL模組的所有預設VCL程式碼都有50priority。 如果您希望動作最後發生或覆寫預設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版本。

  1. 使用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版本。

  2. 使用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參考

NOTE
使用這些命令來管理您使用Fastly API新增的程式碼片段。 如果您從Admin新增代碼片段,請參閱使用Admin管理VCL代碼片段
  • 取得使用中的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
    
  • 覆寫預設Fastly VCL程式碼中的值

    以更新的值建立程式碼片段,並指派100的優先順序。

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