我对于我的 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 有一个名为“源路径”的设置,这是源的一个属性,有时人们会将其与“路径模式”混淆,后者是缓存行为的一个属性。将“源路径”留空,因为它与您要发送到特定源的路径无关。