
EC2 上にある、URL を持つ Web サイトをキャッシュしようとしていますuncached.xyz.com
。そのため、オリジンが を指す Cloud Front を作成し、のような名前の CloudFront ディストリビューションを指すuncached.xyz.com
レコードを作成しました。xyz.com
d111111abcdef8.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 を設定することが考えられます。