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

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

我对于我的 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 API node.js 服务器的 ec2 实例

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

这种设置的问题在于,如果你有超过 1 个 ec2 实例,那么它的扩展性不好,而且很难维护

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

提前致谢 :)

答案1

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

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

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

对 mydomain.com/anything/ including/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存在,则 S3 将返回重定向到/foo/bar/,在浏览器的地址栏中出现尾部斜杠后,这将导致上述行为/。(这是重定向以添加尾部斜杠是标准的 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 有一个名为“源路径”的设置,这是源的一个属性,有时人们会将其与“路径模式”混淆,后者是缓存行为的一个属性。将“源路径”留空,因为它与您要发送到特定源的路径无关。

相关内容