亚马逊路线53 + cloudfront + s3 – >与ec2中的angularjs2应用程序

我真的很困惑我需要我的angularjs2应用程序的设置。

这只是一个与html5模式url的SPA应用程序,我只想要的是:

  • 请求www.mydomain.com/blabla...将被redirect到相同的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/...将redirect到ec2实例持有我的REST API node.js服务器

通常我只是用nginx和node.js,而nginx的try_files使用1 ec2实例,如果失败,它给出index.html文件,如果url是/api/..它将请求redirect到相同的api EC2

该设置的问题是,如果您有超过1个ec2实例,它不能很好地扩展和难以维护

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

提前致谢 :)

请求www.mydomain.com/blabla …将被redirect到相同的mydomain,但没有www

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

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

请求mydomain.com/anything/including/path/like/这将给s3(/ cloudfront)index.html

configuration静态网站托pipe的example.com存储桶(包含您的内容的存储桶,而不是上面讨论的那个存储空间),并在存储区的静态网站托pipeconfiguration选项中将索引文档名称设置为 index.html 。 如S3文档中所述,当针对存储区启用了S3网站托pipefunction时,根据以下规则,存储区中适当位置的指定索引页将被S3自动返回:

  • 如果请求的path是/foo/bar/ (带有斜线),则S3使用键foo/bar/index.html查找对象并返回它,从而保持浏览器的地址栏不变。

  • 如果所请求的path是/foo/bar (没有结尾的斜杠),并且foo/bar/index.html存在,那么S3返回一个redirect到/foo/bar/ ,导致上面描述的行为,浏览器的地址栏。 (这是redirect添加结尾的斜杠是标准的Web服务器行为;否则索引页面中的相对链接将指向错误的目录)。

在设置CloudFront原点时,您不必从CloudFront的下拉列表中select存储区,而需要input存储区的网站端点主机名。 否则,像索引文件这样的网站function将不会被启用:

重要

不要从列表中select您的存储桶的名称,例如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)

您可以configurationCloudFront,以使用caching行为来select将请求发送到哪个“源”(后端系统),每个caching行为都与path模式相匹配。 这听起来像是在这种情况下,您希望您的默认caching行为指向存储桶,如果不匹配另一个caching行为,该存储桶将发送所有请求。

最后但并非最不重要的请求mydomain.com/api / …将redirect到ec2实例持有我的REST API node.js服务器

大概你并不是指“redirect”,而是指EC2实例的“转发”或“代理”(同样的东西)请求。

将EC2实例声明为您的站点的CloudFront分配中的另一个来源。 创build一个与使用此来源的path模式/api/*相匹配的新caching行为,CloudFront将这些请求发送到您的EC2实例。

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

请注意,在caching行为path模式中,缺less的前导斜杠是隐含的,所以api/*相当于/api/*

另请注意,CloudFront有一个名为“origin path”的设置,这个设置是来源的一个属性,有时候人们会将其作为caching行为属性的“path模式”混淆。 将“原点path”留空,因为它与要发送到特定原点的path无关。