2016-01-05 28 views
6

私は、Cloudfrontの起源としてS3に依存している多くのサイトで問題を抱えてきました。しかし、複数のドメイン(グローバル*の代わりに)を許可することに問題があります。AWS:S3 CORS設定で複数のドメインを許可するにはどうすればよいですか?

私は文書here(最初の設定)に従っています。そして、いくつかの他のランダムなSOやフォーラムの回答がこことそこに見つかりました(第2の設定)

助けていただければ幸いです。

私は、次の両方のように見えるセットアップCORSルールがあります。

:私は https://example.com以外のすべてのサイト 上のフォントの原点エラーを取得しておく

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <CORSRule> 
     <AllowedOrigin>https://example.com</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedMethod>HEAD</AllowedMethod> 
     <AllowedMethod>DELETE</AllowedMethod> 
     <AllowedMethod>PUT</AllowedMethod> 
     <AllowedMethod>POST</AllowedMethod> 
     <MaxAgeSeconds>3000</MaxAgeSeconds> 
     <AllowedHeader>Authorization</AllowedHeader> 
    </CORSRule> 
    <CORSRule> 
     <AllowedOrigin>http://example.com</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 
    <CORSRule> 
     <AllowedOrigin>https://staging.example.com</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 
    <CORSRule> 
     <AllowedOrigin>http://example.dev</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 
</CORSConfiguration> 

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <CORSRule> 
     <AllowedOrigin>https://example.com</AllowedOrigin> 
     <AllowedOrigin>http://example.com</AllowedOrigin> 
     <AllowedOrigin>https://staging.example.com</AllowedOrigin> 
     <AllowedOrigin>http://example.dev</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedMethod>HEAD</AllowedMethod> 
     <AllowedMethod>DELETE</AllowedMethod> 
     <AllowedMethod>PUT</AllowedMethod> 
     <AllowedMethod>POST</AllowedMethod> 
     <MaxAgeSeconds>3000</MaxAgeSeconds> 
     <AllowedHeader>Authorization</AllowedHeader> 
    </CORSRule> 
</CORSConfiguration> 

原点 'http://CLOUDFRONTURL'のフォントがクロスソースリソース共有ポリシーによって読み込まれないようにブロックされています。要求されたリソースに 'Access-Control-Allow-Origin'ヘッダーがありません。 Origin 'http://example.dev'はアクセスできません。

原点からフォント「http://CLOUDFRONTURLは」クロスオリジンリソースの共有ポリシーによってロードからブロックされています:「アクセス制御 - 許可 - 起源」ヘッダーはその値「https://example.com」を持っています供給元と同じではありません。 Origin 'http://example.dev'はアクセスできません。だけではなく、パス -

+0

CloudFrontディストリビューションは 'Origin'リクエストヘッダーをホワイトリストに登録しますか? –

+0

@ Michael-sqlbot私はそれを確認する場所がわかりません。原点を編集しても、ホワイトリストの原点リクエストヘッダーに関連するものは得られません。 – Dez

+0

これは、原点の設定ではなく、キャッシュの動作の設定です。 http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web –

答えて

3

は、CloudFrontのは、それがオリジンサーバにブラウザから転送されたリクエストヘッダのすべて基づいてオブジェクトをキャッシュします。

応答をキャッシュから処理するには、まったく同じ要求ヘッダーを含む以前の要求に対して応答が返されている必要があります。

これは、原則として、少なくとも異なるヘッダーがサーバーによって異なる動作を引き起こす可能性があり、適切に動作しているキャッシュがそうでないと想定する自由がないからです。に要求を転送する前に、ほぼ要求ヘッダーの正しい応答(すなわち、同じ応答であるオリジンサーバが、所与の要求に対して返されたであろう)、CloudFrontのストリップを提供する能力を損なうことなく、オブジェクトのキャッシュ可能性を高めるために

キャッシュのルックアップを実行するときに削除された要求のバージョンを使用します。

オリジンサーバーが「カスタム」(つまりS3ではない)オリジンである場合、オリジンサーバーに転送するヘッダーを選択できます。

起点サーバーがS3の場合でも選択肢はありますが、オプションで転送できるのは3つだけです。すべてCORSに関連しています。

[S3の原点と、]あなたはCloudFrontのは、転送するようにしてわずか3つのヘッダーに基づいて、あなたのオブジェクトをキャッシュするように設定できます Access-Control-Request-HeadersAccess-Control-Request-Method、および Origin。これらのヘッダーを転送することで、CrossFrontは、クロスオリジンリソース共有(CORS)が有効になっているWebサイトのコンテンツを配信できます。カスタムヘッダーをAmazon S3に転送するようCloudFrontを設定することはできません。

Origin:ヘッダの場合、少なくとも、次いでS3はそれに反応することができなくなり、転送されません。このヘッダーの転送を有効にすることは、S3がそれを見て、バケット上のCORS設定のために応答を変更するだけでなく、Origin:の各バリエーション(同じオブジェクトの場合)正しい)応答がS3によって返され、CloudFrontによる将来の照合要求のためにキャッシュされます。

CloudFrontでカスタムヘッダーを転送することはできません.S3は静的コンテンツを格納するため、他のヘッダーでは応答が変わらないため、転送すると無意味になり、キャッシュヒットが減少します。多くの(おそらくは)異なる応答がキャッシュされていますが、同一のヘッダーが付いた要求に応答してのみ提供されます。

関連する問題