本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
當您從 F5 遷移到 AWS 上的 Application Load Balancer 時修改 HTTP 標頭
由 Sachin Trivedi (AWS) 建立
Summary
當您將使用 F5 Load Balancer 的應用程式遷移至 Amazon Web Services (AWS) 並想要在 AWS 上使用 Application Load Balancer 時,遷移 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 全受管負載平衡服務,可在開放系統互連 (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 文件