AWS Cloud Front、正しい URL を使用してオリジンをリクエストする方法

AWS Cloud Front、正しい URL を使用してオリジンをリクエストする方法

EC2 上にある、URL を持つ Web サイトをキャッシュしようとしていますuncached.xyz.com。そのため、オリジンが を指す Cloud Front を作成し、のような名前の CloudFront ディストリビューションを指すuncached.xyz.comレコードを作成しました。xyz.comd111111abcdef8.cloudfront.net

しかし、サーバーから返されるすべての情報 (ボタンの URL など) は相対的ではなく、リクエスト URL が含まれます。つまり、Cloudfront が を使用してオリジンにアクセスするとuncached.xyz.com、CDN から返されるコンテンツ (使用される cname の場合) には、CloudFront ディストリビューションへのアクセスに使用される URL ではなく、オリジン URL が含まれ、 で <a href="uncached.xyz.com/info"><a>あるべきところが のように見えます<a href="xyz.com/info"><a>

要約:

CloudFront は以下を返す必要があります:
<a href="xyz.com/info"><a> (これは CDN ディストリビューション (キャッシュされたウェブサイト) を指すアクセスされた URL です)
しかし、以下を返します:
<a href="uncached.xyz.com/info"><a> (これはキャッシュされるデータ (ウェブサイト) を含む Origin URL です)

オリジン サーバーを「偽装」して、アクセスに使用されている URL が、構成されたオリジン URL ではなく CloudFront ディストリビューションであると思わせる方法はありますか?

私が使用しているものの簡易バージョンです。

アーキテクチャの例

答え1

それにはいくつかの方法があります:

オリジン リクエストがバックエンド アプリケーションに必要な情報を渡すには、Cloudfront 構成内でヘッダー X-Forwarded-Host と X-Forwarded-Proto を設定します。バックエンドでは、ヘッダーが存在する場合は、ページ内のコンテンツを生成するためにヘッダーを使用します。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Host

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto

別の方法としては、オリジンの応答を処理し、必要に応じてコンテンツを置き換える lambda@edge を設定することが考えられます。

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-updating-http-responses.html

関連情報