本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
當您在 上從 F5 遷移至 Application Load Balancer 時修改HTTP標頭 AWS
由 Sachin Trivedi 建立 (AWS)
環境:PoC 或試行 | 來源:內部部署 | 目標:AWS雲端 |
R 類型:Replatform | 工作負載:所有其他工作負載 | 技術:聯網;混合雲端;遷移 |
AWS 服務:Amazon CloudFront;Elastic Load Balancing (ELB);AWSLambda |
Summary
當您將使用 F5 Load 平衡器的應用程式遷移至 Amazon Web Services (AWS) 並想要在 上使用 Application Load Balancer 時AWS,遷移 F5 規則以進行標頭修改是常見的問題。Application Load Balancer 不支援標頭修改,但您可以使用 Amazon CloudFront 作為內容交付網路 (CDN) 和 Lambda@Edge 來修改標頭。
此模式描述必要的整合,並提供範例程式碼,以便使用 AWS CloudFront 和 Lambda@Edge 進行標頭修改。
先決條件和限制
先決條件
內部部署應用程式,使用 F5 負載平衡器搭配使用 取代標頭值的HTTP組態
if, else
。如需此組態的詳細資訊,請參閱 F5 產品文件中的 HTTP::header。
限制
此模式適用於 F5 負載平衡器標頭自訂。對於其他第三方負載平衡器,請檢查負載平衡器文件以取得支援資訊。
您用於 Lambda@Edge 的 Lambda 函數必須位於美國東部 (維吉尼亞北部) 區域。
架構
下圖顯示 上的架構AWS,包括 CDN和其他 AWS 元件之間的整合流程。
工具
AWS 服務
Application Load Balancer - Application Load Balancer 是AWS完全受管的負載平衡服務,可在 Open Systems Interconnection (OSI) 模型的第七層運作。它平衡了多個目標的流量,並根據HTTP標頭和方法、查詢字串以及主機型或路徑型路由支援進階路由請求。
Amazon CloudFront – Amazon CloudFront 是一項 Web 服務,可加速將靜態和動態 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 函數。(其他 bluePrints 適用於不同的使用案例;如需詳細資訊,請參閱 CloudFront 文件中的 Lambda@Edge 範例函數。) 若要建立 Lambda@Edge 函數:
| AWS 管理員 |
部署 Lambda@Edge 函數。 | 請遵循教學課程的步驟 4:在 Amazon CloudFront 文件中建立簡單的 Lambda@Edge 函數,以設定 CloudFront 觸發條件並部署函數。 | AWS 管理員 |
相關資源
CloudFront 文件