私はangularjs2アプリに必要なセットアップについて本当に混乱しています。
これは、html5モードのURLを使用したSPAアプリケーションであり、必要なのは次のとおりです。
www.mydomain.com/blabla...
へのリクエストは、同じmydomainにリダイレクトされますが、wwwはありませんmydomain.com/anything/including/path/like/this
へのリクエストは、s3(/ cloudfront)index.html
を提供しますmydomain.com/path/or/not/path/file_that_ends_with_any_extesnion_like.js
へのリクエストはs3(/ cloudfront)からそのファイルを提供します難しすぎる場合は、すべてのアセットがアセットフォルダーにあるようにウェブサイトを設定することもできますしたがって、mydomain.com/assets/path/blabla.bla
へのリクエストは静的なものを提供しますs3からのファイル(/ cloudfront)mydomain.com/api/...
へのリクエストは、私のREST APInode.jsサーバーを保持するec2インスタンスにリダイレクトされます。通常、nginx try_files
の間にnginxとnode.jsで1つのec2インスタンスを使用し、失敗した場合はindex.html
ファイルを提供し、URLが/api/..
の場合は、同じec2にあるAPIにリクエストをリダイレクトします。
このセットアップの問題は、複数のec2インスタンスがある場合、拡張性が低く、維持が難しいことです。
Googleでよく調べましたが、AWSクラウドで説明したような設定方法に関するガイドやブログ投稿が見つかりません。
前もって感謝します :)
www.mydomain.com/blabla ...へのリクエストは、同じmydomainにリダイレクトされますが、wwwはありません。
これは、S3でwww.example.com
という名前の空のバケットを作成し、すべてのリクエストを別のホスト名(example.com
)にリダイレクトするように構成し、DNSをそのバケットに向けることによって行われます。
Www側でhttpsリクエストのリダイレクトをサポートする場合は、バケットのWebサイトエンドポイントを指すwwwホスト名の2番目のCloudFrontディストリビューションを作成し、DNSがCloudFrontを指すようにします。
mydomain.com/anything/include/path/like/thisへのリクエストにより、s3(/ cloudfront)index.htmlが提供されます
静的Webサイトホスティング用にexample.com
バケット(上記の空のバケットではなく、コンテンツを含むバケット)を構成し、バケットの静的Webサイトホスティング構成オプションで インデックスドキュメント名をindex.html
に設定します。 S3のドキュメントで説明されているように、バケットに対してS3 Webサイトホスティング機能が有効になっている場合、バケット内の適切な場所からの名前付きインデックスページは、次のルールに従って、可能な限りS3によって自動的に返されます。
リクエストされたパスが/foo/bar/
(末尾にスラッシュが付いている)の場合、S3はキーfoo/bar/index.html
を持つオブジェクトを探して返し、ブラウザのアドレスバーは変更されません。
リクエストされたパスが/foo/bar
(末尾のスラッシュなし)で、foo/bar/index.html
が存在する場合、S3は/foo/bar/
へのリダイレクトを返します。これにより、末尾の/
がブラウザのアドレスバーに表示された後、上記の動作が発生します。 (これは、末尾のスラッシュを追加するためのリダイレクトであり、標準のWebサーバーの動作です。そうしないと、インデックスページの相対リンクが間違ったディレクトリを指します)。
CloudFront Originをセットアップするときに、CloudFrontのドロップダウンリストからバケットを選択する代わりに、バケットのWebサイトエンドポイントホスト名を入力する必要があります。そうしないと、インデックスドキュメントなどのWebサイト機能が有効になりません。
重要
Example.com.s3.amazonaws.comなど、リストからバケットの名前を選択しないでください
http://docs.aws.Amazon.com/gettingstarted/latest/swh/getting-started-create-cfdist.html
次号:
mydomain.com/path/or/not/path/file_that_ends_with_any_extesnion_like.jsへのリクエストは、難しすぎる場合はs3(/ cloudfront)からそのファイルを提供します。すべてのアセットがアセットフォルダーにあるようにウェブサイトを設定することもできます。 mydomain.com/assets/path/blabla.blaへのリクエストは、s3(/ cloudfront)から静的ファイルを提供します
それぞれがパスパターンに一致するキャッシュ動作を使用して、リクエストの送信先の「オリジン」(バックエンドシステム)を選択するようにCloudFrontを設定できます。この場合、デフォルトのキャッシュ動作がバケットを指すようにしたいようです。バケットは、別のキャッシュ動作と一致しない場合、そこにすべてのリクエストを送信します。
最後になりましたが、mydomain.com/api/...へのリクエストは、my REST APInode.jsサーバーを保持するec2インスタンスにリダイレクトされます。
おそらく、実際には「リダイレクト」を意味するのではなく、EC2インスタンスへの「転送」または「プロキシ」(同じこと)リクエストを意味します。
EC2インスタンスをサイトのCloudFrontディストリビューションの別のオリジンとして宣言します。このオリジンを使用するパスパターン/api/*
に一致する新しいキャッシュ動作を作成すると、CloudFrontはこれらのリクエストをEC2インスタンスに送信します。
EC2のコードがAPIレスポンスで適切なCache-Control:
ヘッダーを返すようにして、CloudFrontが適切な時間キャッシュするか、Cache-Control: no-cache
を返す場合はまったくキャッシュしないようにします。
キャッシュ動作パスパターンでは、先頭のスラッシュが欠落していることは暗黙的であるため、api/*
は/api/*
と同等であることに注意してください。
CloudFrontには、オリジンの属性である「オリジンパス」と呼ばれる設定があることにも注意してください。これは、キャッシュ動作の属性である「パスパターン」と混同されることがあります。 「オリジンパス」は、特定のオリジンに送信するパスとは関係がないため、空白のままにします。