本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 AWS 上從 F5 遷移到 Application Load Balancer 時修改 HTTP 標頭
由薩欽特里韋迪(AWS)創建
環境:PoC 或試點 | 來源:內部部署 | 目標:AWS 雲端 |
R 類型:重新平台 | 工作負載:所有其他工作 | 技術:網路、混合雲、移轉 |
AWS 服務:Amazon CloudFront;Elastic Load Balancing (ELB);AWS Lambda |
Summary
當您將使用 F5 負載平衡器的應用程式遷移到 Amazon Web Services (AWS) 並想要在 AWS 上使用應用程式負載平衡器時,遷移 F5 標題修改規則是一個常見問題。應用程式負載平衡器不支援標頭修改,但您可以使用 Amazon CloudFront 做為內容交付網路 (CDN),使用 Lambda @Edge 來修改標頭。
此模式描述必要的整合,並提供使用 AWS 和 Lambda @Edge 進行標頭修改 CloudFront 的範例程式碼。
先決條件和限制
先決條件
使用 F5 負載平衡器的內部部署應用程式,其組態可以使用來取代 HTTP 標頭值
if, else
。如需有關此組態的詳細資訊,請參閱 F5 產品文件中的 HTTP:: header。
限制
此模式適用於 F5 負載平衡器標頭自訂。對於其他第三方負載平衡器,請查看負載平衡器文件以取得支援資訊。
您用於 Lambda @Edge 的 Lambda 函數必須位於美國東部 (維吉尼亞北部) 區域。
架構
下圖顯示 AWS 上的架構,包括 CDN 和其他 AWS 元件之間的整合流程。
![使用 Amazon CloudFront 和 Lambda @Edge 進行標頭修改的架構](images/pattern-img/00abbe3c-2453-4291-9b24-b488dced4868/images/4ee9a19e-6da2-4c5a-a8bc-19d3918a166e.png)
工具
AWS 服務
應用程式負載平衡器 ─ 應用程式負載平衡器是 AWS 全受管負載平衡服務,可在開放系統互連 (OSI) 模型的第七層運作。它平衡多個目標的流量,並支援基於 HTTP 標頭和方法、查詢字串以及主機型或路徑型路由的進階路由要求。
Amazon CloudFront — Amazon CloudFront 是一種網絡服務,可以加快向用戶分發靜態和動態 Web 內容(例如 .html,.css,.js 和圖像文件)的速度。 CloudFront 透過稱為節點位置的全球資料中心網路傳遞您的內容,以降低延遲並提升效能。
Lambda @Edge ─ Lambda @Edge 是 AWS Lambda 的擴充功能,可讓您執行函數來自訂 CloudFront 交付的內容。您可以在美國東部 (維吉尼亞北部) 區域撰寫函數,然後將函數與 CloudFront 分發產生關聯,以便在全球範圍內自動複寫您的程式碼,而無需佈建或管理伺服器。這樣可以減少延遲並改善使用者體驗。
Code
下列範例程式碼提供修改 CloudFront 回應標頭的藍圖。依照 Epics 一節中的指示部署程式碼。
exports.handler = async (event, context) => { const response = event.Records[0].cf.response; const headers = response.headers; const headerNameSrc = 'content-security-policy'; const headerNameValue = '*.xyz.com'; if (headers[headerNameSrc.toLowerCase()]) { headers[headerNameSrc.toLowerCase()] = [{ key: headerNameSrc, value: headerNameValue, }]; console.log(`Response header "${headerNameSrc}" was set to ` + `"${headers[headerNameSrc.toLowerCase()][0].value}"`); } else { headers[headerNameSrc.toLowerCase()] = [{ key: headerNameSrc, value: headerNameValue, }]; } return response; };
史诗
任務 | 描述 | 所需技能 |
---|---|---|
建立 CloudFront Web 分發。 | 在此步驟中,您會建立一個 CloudFront 發佈,告訴您 CloudFront 要將內容傳送來源,以及如何追蹤和管理內容傳遞的詳細資料。 若要使用主控台建立分發,請登入 AWS 管理主控台,開啟CloudFront 主控台 | 雲端管理員 |
任務 | 描述 | 所需技能 |
---|---|---|
建立和部署 Lambda 函數。@Edge | 您可以使用用於修改 CloudFront 回應標頭的藍圖來建立 Lambda @Edge 函數。其他藍圖適用於不同的使用案例;如需詳細資訊,請參閱 CloudFront 文件中的 Lambda @Edge 範例函數。) 若要建立 Lambda 函數:@Edge
| AWS 管理員 |
部署 Lambda 函數。@Edge | 遵循 Amazon CloudFront 文件中教學課程:建立簡單 Lambda @Edge 函數的步驟 4 中的指示來設定 CloudFront 觸發器並部署函數。 | AWS 管理員 |
相關資源
CloudFront 文件