封鎖要求的自訂VCL

您可以使用適用於Magento2的Fastly CDN模組來建立Edge ACL,其中包含您要封鎖的IP位址清單。 然後,您可以將該清單與VCL程式碼片段搭配使用,以封鎖傳入的請求。 此程式碼會檢查傳入要求的IP位址。 如果它符合ACL清單中包含的IP位址,Fastly會封鎖存取您網站的請求,並傳回403 Forbidden error。 允許存取所有其他使用者端IP位址。

必要條件:

  • 您的環境必須設定為使用Fastly CDN。 請參閱設定Fastly服務

  • 確保您執行的是Magento2適用的最新版Fastly CDN模組。 請參閱升級Fastly模組

  • 驗證Fastly服務的環境設定。 請參閱檢查Fastly快取

  • 您必須擁有管理員憑證才能存取測試環境和生產環境。

  • 要封鎖的使用者端IP位址清單

建立Edge ACL以封鎖使用者端IP位址

您可以建立Edge ACL,定義要封鎖的IP位址清單。 建立ACL之後,您可以在自訂VCL程式碼片段中使用它來管理對測試或生產網站的存取。

透過在兩個環境中建立具有相同名稱的Edge ACL來管理中繼和生產網站的存取權。 VCL程式碼片段程式碼適用於兩種環境。

  1. 登入管理員。
  2. 導覽至​ 商店 >設定> 設定 > 進階 > 系統 > 全頁快取 > 快速設定
  3. 展開​ Edge ACL ​區段。
  4. 按一下​ 新增ACL ​以建立清單。 在此範例中,將清單命名為「blocklist」。
  5. 在清單中輸入IP位址值。 所有新增至此清單的使用者端IP位址都會遭到封鎖,無法存取網站。
  6. 視需要選取​ 否定 ​核取方塊。

您可以在VCL程式碼片段中依名稱參照Edge ACL。

建立封鎖清單的自訂VCL

NOTE
此範例向進階使用者說明如何建立VCL程式碼片段,以設定自訂封鎖規則以上傳到Fastly服務。 您可以使用Fastly CDN中適用於Magento2模組的封鎖功能,根據Adobe Commerce管理員提供的國家/地區來設定封鎖清單或允許清單。

定義Edge ACL後,您可以使用它來建立VCL程式碼片段,以封鎖對ACL中所指定IP位址的存取。 您可以在測試環境和生產環境中使用相同的VCL程式碼片段,但必須分別將程式碼片段上傳至每個環境。

以下自訂VCL片段代碼(JSON格式)顯示邏輯,用於封鎖使用者端IP位址符合封鎖清單ACL位址的傳入請求。

{
  "name": "blocklist",
  "dynamic": "0",
  "type": "recv",
  "priority": "5",
  "content": "if ( client.ip ~ blocklist) { error 403 \"Forbidden\"; }"
}

根據此範例建立程式碼片段之前,請檢閱值以判斷是否需要進行任何變更:

  • name: VCL程式碼片段的名稱。 在此範例中,我們使用名稱blocklist

  • priority:決定VCL程式碼片段何時執行。 優先順序為5,可立即執行並檢查管理員要求是否來自允許的IP位址。 程式碼片段會在任何預設MagentoVCL程式碼片段(magentomodule_*)被指派優先順序為50之前執行。 視您希望程式碼片段執行的時間而定,將每個自訂程式碼片段的優先順序設定為高於或低於50。 優先順序較低的程式碼片段會先執行。

  • type:指定VCL程式碼片段的型別,以決定所產生VCL程式碼中程式碼片段的位置。 在此範例中,我們使用recv,它將VCL程式碼插入vcl_recv副程式中,在樣板VCL的下方及任何物件上方。 如需程式碼片段型別的清單,請參閱Fastly VCL程式碼片段參考

  • content:要執行的VCL程式碼片段,會檢查使用者端IP位址。 如果IP位在Edge ACL中,則會封鎖整個網站的存取權,並產生403 Forbidden錯誤。 允許存取所有其他使用者端IP位址。

檢閱並更新您環境的程式碼後,請使用下列其中一種方法,將自訂VCL程式碼片段新增至您的Fastly服務設定:

  • 從Admin新增自訂VCL程式碼片段。 如果您可以存取Admin,則建議使用此方法。 (需要Fastly 1.2.58或更新版本。)

  • 將JSON程式碼範例儲存至檔案(例如,blocklist.json)並使用Fastly API🔗上傳。 如果您無法存取Admin,請使用此方法。

新增自訂VCL片段

  1. 登入管理員。

  2. 按一下​ 商店 >設定> 組態 > 進階 > 系統

  3. 展開​ 完整頁面快取 > Fastly組態 > 自訂VCL程式碼片段

  4. 按一下​ 建立自訂程式碼片段

  5. 新增VCL程式碼片段值:

    • 名稱blocklist

    • 型別recv

    • 優先順序5

    • 新增​ VCL ​程式碼片段內容:

      code language-conf
      if ( client.ip ~ blocklist) { error 403 "Forbidden"; }
      
  6. 按一下​ 建立 ​以產生名稱模式為type_priority_name.vcl的VCL程式碼片段檔案,例如recv_5_blocklist.vcl

  7. 頁面重新載入後,按一下​ Fastly組態 ​區段中的​ 上傳VCL到Fastly,以將檔案新增到Fastly服務組態。

  8. 上傳後,請根據頁面頂端的通知重新整理快取。

Fastly會在上傳過程中驗證VCL程式碼的更新版本。 如果驗證失敗,請編輯自訂VCL程式碼片段以修正問題。 然後,再次上傳VCL。

封鎖要求的其他VCL範例

以下範例說明如何使用內嵌條件陳述式而非ACL清單來封鎖請求。

WARNING
在這些範例中,VCL程式碼會格式化為JSON裝載,可儲存至檔案並以Fastly API請求提交。 您可以從Admin🔗提交VCL程式碼片段,或使用Fastly API以JSON字串形式提交。 若要避免在搭配JSON字串使用Fastly API時出現驗證錯誤,您必須使用反斜線來逸出特殊字元。
NOTE
如果您要從Admin提交VCL程式碼片段,請從範例VCL程式碼中擷取個別值,並將它們輸入到對應的欄位中。 例如:
  • 名稱: <name of the VCL>
  • 動態: <0/1>
  • 型別: <type>
  • 優先順序: <priority>
  • 內容: <content>

請參閱Fastly VCL檔案中的使用動態VCL片段

VCL程式碼範例:依國家/地區程式碼分塊

此範例針對與IP位址相關聯的國家/地區使用兩個字元的ISO 3166-1國碼。

{
  "name": "blockbycountrycode",
  "dynamic": "0",
  "type": "recv",
  "priority": "5",
  "content": "if ( client.geo.country_code == \"HK\" ) { error 405 \"Not allowed\";}"
}
NOTE
您可以透過雲端基礎結構管理員上的Adobe Commerce中的Fastly 封鎖功能,設定依國家/地區代碼或國家/地區代碼清單進行封鎖,而不使用自訂VCL程式碼片段。

VCL程式碼範例: Block by HTTP User-Agent要求標頭

{
  "name": "blockbyuseragent",
  "dynamic": "0",
  "type": "recv",
  "priority": "5",
  "content": "if ( req.http.User-Agent ~ \"(UCBrowser|MQQBrowser|LieBaoFast|Mb2345Browser)\" ) {error 405 \"Not allowed\";}"
}
NOTE
您可以新增程式碼片段至環境中的$MAGENTO_CLOUD_APP_DIR/var/vcl_snippets_custom目錄,而不必手動上傳自訂VCL程式碼片段。 當您在Commerce Admin中按一下​_將VCL上傳至Fastly_​時,此目錄中的程式碼片段會自動上傳。 請參閱Fastly CDN模組中的自動自訂VCL程式碼片段部署以取得Magento2檔案。

修改自訂VCL片段

  1. 登入管理員。

  2. 按一下​ 商店 > 設定 > 組態 > 進階 > 系統

  3. 展開​ 完整頁面快取 > Fastly組態 > 自訂VCL程式碼片段

    管理自訂VCL程式碼片段

  4. 在​ 動作 ​欄中,按一下要編輯的程式碼片段旁的設定圖示。

  5. 頁面重新載入後,在​ Fastly組態 ​區段中按一下​ 上傳VCL到Fastly

  6. 上傳完成後,請根據頁面頂端的通知重新整理快取。

WARNING
自訂VCL程式碼片段 UI選項只會顯示透過Adobe Commerce管理員新增的程式碼片段。 如果您使用Fastly API新增程式碼片段,請使用該API來管理它們

刪除自訂VCL片段

  1. 登入管理員。

  2. 按一下​ 商店 > 設定 > 組態 > 進階 > 系統

  3. 展開​ 完整頁面快取 > Fastly組態 > 自訂VCL程式碼片段

    管理自訂VCL程式碼片段

  4. 在​ 動作 ​欄中,按一下要刪除的程式碼片段旁的垃圾桶圖示。

  5. 在下一個模型視窗中,按一下​ DELETE ​並啟動新版本。

WARNING
自訂VCL程式碼片段 UI選項只會顯示透過Adobe Commerce管理員新增的程式碼片段。 如果您使用Fastly API新增程式碼片段,請使用該API來管理它們
recommendation-more-help
05f2f56e-ac5d-4931-8cdb-764e60e16f26