Amazon route 53 + cloudfront + s3 -> 在 ec2 中使用 angularjs2 应用程序

kfi*_*124 1 amazon-s3 amazon-cloudfront amazon-ec2 amazon-web-services amazon-route53

我对我的 angularjs2 应用程序所需的设置感到非常困惑。

它只是一个带有 html5 模式网址的 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 API node.js 服务器的 ec2 实例

通常我只会在 nginx 和 node.js 中使用 1 个 ec2 实例,try_files如果它失败,它会提供index.html文件,如果 url 是/api/..它,它将请求重定向到位于同一个 ec2 上的 api

该设置的问题在于,如果您有 1 个以上的 ec2 实例,它就不能很好地扩展并且难以维护

我在谷歌上看了很多,但找不到任何关于如何设置类似于我在 AWS 云中描述的内容的指南或博客文章。

提前致谢 :)

Mic*_*bot 5

对 www.mydomain.com/blabla... 的请求将被重定向到同一个 mydomain 但没有 www

这是通过在 S3 中创建一个名为 的空存储桶www.example.com,将其配置为将所有请求重定向到不同的主机名 ( example.com) 并将 DNS 指向它来完成的。

如果您希望它支持 www 端的 https 请求重定向,您可以为 www 主机名创建第二个 CloudFront 分配,指向存储桶的网站终端节点,并将 DNS 指向 CloudFront。

对 mydomain.com/anything/include/path/like/this 的请求将提供 s3 (/cloudfront) index.html

example.com为静态网站托管配置存储桶(包含您的内容的存储桶,而不是上面讨论的空存储桶),并在存储桶的静态网站托管配置选项中设置索引文档名称 index.html。如 S3 文档中所述,当为存储桶启用 S3 网站托管功能时,S3 将根据以下规则尽可能自动返回存储桶中适当位置的命名索引页面:

  • 如果请求的路径是/foo/bar/(带有斜杠),则 S3 查找带有键的对象foo/bar/index.html并将其返回,浏览器的地址栏保持不变。

  • 如果请求的路径是/foo/bar(没有尾部斜杠)并且foo/bar/index.html存在,那么/foo/bar/在尾部/出现在浏览器的地址栏中之后,S3 返回重定向到,这会导致上述行为。(这是重定向以添加尾部斜杠是标准的 Web 服务器行为;否则索引页面中的相关链接将指向错误的目录)。

在设置 CloudFront 源时,您无需从 CloudFront 的下拉列表中选择存储桶,而是需要输入存储桶的网站终端节点主机名。否则将不会启用索引文档等网站功能:

重要的

不要从列表中选择您的存储桶名称,例如 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/... 的请求将重定向到包含我的 REST API node.js 服务器的 ec2 实例

据推测,您并不是真正的意思是“重定向”,而是指对 EC2 实例的“转发”或“代理”(同一件事)请求。

将 EC2 实例声明为您站点的 CloudFront 分配中的另一个源。创建/api/*使用此源的新缓存行为匹配路径模式,CloudFront 会将这些请求发送到您的 EC2 实例。

确保您在 EC2 上的代码在Cache-Control:API 响应上返回适当的标头,以便 CloudFront 将它们缓存适当的时间,或者如果您返回Cache-Control: no-cache.

请注意,在缓存行为路径模式中,缺少前导斜杠是隐式的,因此api/*等效于/api/*.

另请注意,CloudFront 有一个名为“原点路径”的设置,这是原点的一个属性,有时人们会将其与“路径模式”混淆,后者是缓存行为的一个属性。将“源路径”留空,因为它与您要发送到特定源的路径无关。