質問: いつもお世話になっております。 AWSのCloudFrontに関してお聞きしたいです。 CloudfrontはユーザーがS3にある画像にアクセスするとCloudFrontにキャッシュがたまり、二度目以降のアクセスではS3まで行かずCloudFrontから画像を取得してくれます。 しかし、ユーザーがその画像にアクセスする前にCloudFront上にキャッシュを作成しておき、ユーザーにとって一度目のアクセスでcloudfrontのキャッシュを読みこませるようにしたいと思っています。 よくあるのが画像をアップロードする際にキャッシュを作成する方法だと思うのですが、 プロキシサーバ(IPは日本)を介して画像にアクセスし、キャッシュをためたいです。 しかし、同じmacで二度アクセスすると画像のheaderにHit from Cloudfrontとなりキャッシュから読み込んでいるのですが、 日本にあるプロキシサーバで画像を読み込んだ後に(curl や mechanizeで)、日本にあるmacで同じ画像を読み込むとMiss from cloudfrontとなってしまい、キャッシュではなくS3から読み込まれます。 以下、検証内容です。 ``` 【検証:ある画像へ二度アクセスしてHit from Cloudfrontなのか見る】 日本macでアクセス→日本mac(同じmac or 違うmac)で再度アクセス→(Hit from Cloudfront) 日本macでアクセス→プロキシサーバ(IPは日本)でアクセス→(Miss from Cloudfront) プロキシサーバ(IPは日本)でアクセス→同じプロキシサーバ(IPは日本)でアクセス→(Hit from Cloudfront) プロキシサーバ(IPは日本)でアクセス→違うプロキシサーバ(IPは日本)でアクセス→(Miss from Cloudfront) プロキシサーバ(IPは日本)でアクセス→日本macでアクセス(Miss from Cloudfront) ``` こちらで考えた原因としては ``` ・そもそもプロキシサーバからアクセスしてもcloudfrontにキャッシュがたまらないのではないのか ・日本からアクセスしているが実際は異なるエッジロケーションのcloudfrontにアクセスしておりキャッシュが溜まっていないのではないか ``` と考えています。 どなたかご教授いただけないでしょうか。 よろしくおねがいいたします!
回答: CloudFront のエッジロケーションは東京に 2つ、大阪に 1つあるようです。 > > 日本からアクセスしているが実際は異なるエッジロケーションのcloudfrontにアクセスしておりキャッシュが溜まっていないのではないか > > > その可能性はありますね。 また、推測ですが、ドキュメントの「デバイス検出」の段落に、ユーザーエージェントヘッダーによってデバイスの種類を判定しているとありますので、デバイスの種類ごとに区別してキャッシュしている可能性も考えられます。