在AWS S3上托管私人和公共网站

时间:2017-09-04 21:31:14

标签: angularjs node.js amazon-web-services amazon-s3 amazon-cloudfront

我开发了一个带有标志的Angular应用程序,当设置为true应用程序时,该应用程序在公共模式下工作(显示所选页面)。我想将我的应用程序托管为S3存储桶上的静态网站。所以我创建了两个桶

Bucket 1 - 标志设置为false(私有模式,未授权用户无法访问)

Bucket 2 - 标志设置为true(公共模式)

我想要做的是当用户尝试使用网址

访问我的网站时

customdomain.co - 提供私有存储桶(flag = false)和customdomain.co/public的内容 - 提供公共S3存储桶的内容(flag = true

我已成功为我的私人静态网站设置了自定义域名(例如customdomain.co)和CloudFront分配。但我不知道如何使用相同的域设置其他URL以进行公共访问。任何人都可以指出我正确的方向并告诉我如何实现这一目标?任何帮助都非常感谢。谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用CloudFront作为反向代理来完成此操作,类似于此处所述 - https://www.linkedin.com/pulse/how-use-amazon-cloudfront-application-router-chris-iona

或者,您需要使用子域(例如public.customdomain.co),使用API​​网关或其他反向代理反向代理调用,或者在/ public处使用重定向到其他站点的页面(可能是子域)。

答案 1 :(得分:0)

将公共存储桶添加为CloudFront分配上的第二个源。然后,创建一个与路径模式/public*匹配的缓存行为,指向新的原点。

除了一个问题之外,所有这些都是必要的:公共存储桶中的对象将需要以public/开头的密钥,因为CloudFront不会删除您在匹配时添加的前缀路径模式。

如果由于某种原因这个约束是不可接受的,你需要在缓存行为上使用Lambda @ Edge Origin Request触发器,在将请求发送到公共存储桶之前重写路径。