在我的 Amazon CloudFront 發佈項目上設定的原始伺服器使用虛擬主機。我想設定我的發佈項目以將主機標頭轉送到我的原始伺服器。
簡短描述
若要設定您的發佈項目,以將主機標頭轉送至原始伺服器,請執行下列其中一個動作:
- 建立快取政策和原始伺服器請求政策。
- 編輯發佈項目中現有行為的設定。
如果您在沒有自訂網域的 API 閘道原始伺服器建立自訂政策,請勿轉送主機標頭。否則,您將收到 "403 error"。
**重要:**對於 Amazon Simple Storage Service (Amazon S3) 原始伺服器,CloudFront 不支援以主機標頭為基礎的快取。如需詳細資訊,請參閱選取快取所依據的標頭。
解決方法
建立快取政策和原始伺服器請求政策
請完成下列步驟:
- 開啟 CloudFront console (CloudFront 主控台)。
- 在導覽窗格中,選擇 Policies (政策)。
- 在 Custom policies (自訂政策) 區段中,選擇 Create cache policy (建立快取政策)。
- 在 Cache key settings (快取鍵設定) 下方的 Headers (標頭),選擇 Include the following headers (包含下列標頭)。
- 從 Add header (新增標頭) 下拉式清單中,選擇 Host (主機)。
- 根據您的需求完成快取政策的其他設定。
- 選擇 Create (建立)。
- 將政策附加至 CloudFront 發佈項目的相關行為。
編輯發佈項目中現有行為的設定
請完成下列步驟:
- 開啟 CloudFront console (CloudFront 主控台)。
- 選取您的發佈項目。
- 選擇 Behaviors (行為) 索引標籤,然後選取要將主機標頭轉送至的路徑。
- 選擇 Edit (編輯)。
- 確認 Cache key and origin requests (快取鍵和原始伺服器請求) 已設定為 Legacy cache settings (舊版快取設定)。
**注意:**如果未選取 Legacy cache settings (舊版快取設定),請完成上一節的步驟來建立快取政策。
- 在 Legacy cache settings (舊版快取設定) 下方的 Headers (標頭),選擇 Include the following headers (包含下列標頭)。
- 從 Add header (新增標頭) 功能表中,選擇 Host (主機)。
- 選擇 Save Changes (儲存變更)。
(選用) 以不同的名稱轉送標頭
若要使用自訂或其他標頭名稱轉送主機標頭值,請使用 CloudFront 函式或 AWS Lambda@Edge 函式。
若要以不同的名稱轉送標頭,請完成以下步驟:
- 檢查傳入的主機標頭。
**注意:**對於 CloudFront 函式,請檢查檢視器請求事件。對於 Lambda@Edge,請檢查檢視或原始伺服器請求事件。
- 若要將用戶端請求中的主機標頭值儲存到標頭中,請在檢視器請求中使用 Lambda 函式處理常式命令。
注意:例如,如果傳入的主機標頭為主機,請新增一個具有相同值的新標頭。請參閱以下程式碼範例:
function handler(event) { const request = event.request;
const headers = request.headers;
const host = request.headers.host.value;
headers['x-forwarded-host'] = { "value": host }
return request
}
**注意:**此範例函式會啟動檢視器請求事件。
- 若要將自訂標頭轉送至原始伺服器,請設定快取或主機請求政策,以將 X-Forwarded-Host 標頭列入允許清單。如需詳細資訊,請參閱自訂原始伺服器的請求和回應行為。
相關資訊
根據請求標頭快取內容
使用政策控制快取鍵