2017-01-16 13 views
0

私はちょっとした状況があります。クラウドフレアがリダイレクトをキャッシュしないようにします

ユーザーがアップロードしたメディア(画像操作が適用されている)(usermedia.com)をホストするドメインがあります。メディアはAmazon S3バケットに格納され、Cloudflareはこのバケットの前に座っています。

ユーザーが画像を要求した場合は、https://usermedia.com/my-image-resize-200-200.jpgを参照することがあります。

この画像は、そうでなければアマゾンS3は、リサイズ画像を生成するhttps://app.com/generate/my-image-resize-200-200.jpgに(ルーティング・ルールを介して)302リダイレクトを行いS3にそれをアップロードし、その後、別のバックhttps://usermedia.com/my-image-resize-200-200.jpgにリダイレクトず、それが配信され、存在する場合。今回は、ファイルがS3に存在し、提供されます。

問題は、Cloudflareプロキシが有効になっている場合です。リダイレクトがキャッシュされるため、メディアが存在しない場合、Cloudflareは継続的なリダイレクトサイクルに陥ります。 307リダイレクトを使用しようとしましたが、問題は解決しません。

この問題を回避する方法はありますか?

+0

で同じ問題を抱えて人々を助けるために願っていますか?私はサイトに正確な機能を構築しましたが、AS3ではなくサーバーになっています。 CloudFlareはそれをうまく処理します。次回の画像呼び出しで、ほぼ即座に読み込まれます。 – Jules

+0

Cloudflareではなく、CloudFrontで同様のリダイレクトが設定されていますが、CloudFront> HAProxy(EC2)> S3を使用しています。 HAProxyは403を302に変更し、 'Location:'を設定し、この問題に対処するために 'Cache-Control:no-cache、no-store'を設定します...場所は実際には変更されません。アクションとHAProxyはこれらをResizerサーバーに送信します。その後、リサイザは実際にS3に保存されますが、S3の最終的な一貫性の問題を避けるためにリダイレクトしません。イメージを返すだけです。しかし、私はリダイレクトルールに関する私のメモを取り上げるつもりです。 –

+0

@Julesは良い点を作ります。 S3は、オブジェクトが作成される前に既に 'GET'を行っていて、あなたが意図した通りに、新しいオブジェクトの作成が最終的に一貫しています。 –

答えて

0

私はまったく同じセットアップといくつかの問題があります。私は問題が確かにclouldflareであることを知りました。画像が存在しない場合、S3はresizerのエンドポイントを示す307を返します。おそらく、あなたがキャッシングしている可能性があるので、cloudflareはキャッシュヘッダーを追加します(例:cache-control:public、max-age = 691200)タブにはオプションのブラウザキャッシュ有効期限が設定されているので、ブラウザが応答を受け取ったときに(キャッシュ制御ヘッダーが存在するため)キャッシュするので、次のリクエストはブラウザのキャッシュから処理されます。

更新日:

簡単な解決策は簡単かもしれません。 cloudflareでBrowser Cache Expirationを "Respect Existing Headers"に設定すると、この方法でクラウドフレアはブラウザのキャッシュに応答するヘッダーを追加しません。それでもイメージがローカルにキャッシュする場合はリサイズスクリプト

S3.putObject({ 
    Body: buffer, 
    Bucket: BUCKET, 
    ContentType: 'image/jpeg', 
    CacheControl: 'max-age=604800', 
    Key: finalKey, 
}) 

からそれを作成するときに、他の資産(例えば、CSSやJavaScriptなど)を持っている場合は、単にS3の画像上で直接キャッシュ制御ヘッダーを設定しますそれらのCacheControlヘッダーをawsコンソールから設定することもできます。フォルダ内に「foo」と言えば、Cloudflareに移動し、ページルールを作成して、すべてのブラウザキャッシュTTLを設定するように指示できます"foo"フォルダの下にあるファイル。

は、私はあなたがそれが問題であることにCloudFlareはなく、ブラウザやAmazonだと確信しています、これは後半の答えです知っているが、将来

関連する問題