Gra*_*ant 2 amazon-s3 amazon-web-services amazon-route53
在这里,我遇到了一个非常具体的问题,我们已经拥有并维护了一个系统,该系统涉及使用子域将人员路由到特定应用。
在如下所示的传统服务器上;我们有一个通配符子域* .domain.com,该子域路由到nginx并提供一个文件夹
因此myapp.domain.com> nginx>提供了myapp应用文件夹> myapp文件夹包含一个静态站点
我正在尝试以某种方式将此迁移到AWS,我基本上需要在AWS中做类似的事情,我的想法是将每个静态应用程序放入s3存储桶,然后将其放入路由53中的通配符域,但是不确定s3如何知道要使用哪个文件夹,因为该功能不是路由53的一部分
有人有什么建议吗?
感谢你的帮助
Mic*_*bot 10
CloudFront + Lambda @ Edge + S3可以做到此“无服务器”。
Lambda @ Edge是CloudFront的增强功能,它允许将请求和响应的属性表示和操纵为简单的JavaScript对象。可以设置触发器以在请求处理期间触发,可以在检查缓存之前(“查看器请求”触发器),也可以在请求进行到后端之前(在这种情况下为S3网站托管端点“起源服务器”)在缓存未命中(“原始请求”触发器)之后...或在响应处理期间,从原始接收到响应之后,才考虑将其存储在CloudFront缓存中(“原始响应”触发器),或者在完成对浏览器的响应(“查看器响应”触发器)。响应触发器还可以检查原始请求对象。
以下代码片段是我最初在AWS论坛上发布的内容。这是一个Origin Request触发器,它将原始主机名与您的模式进行比较(例如,域必须匹配*.example.com),如果匹配,则主机名前缀subdomain-here.example.com为request ,该请求是从为该子域命名的文件夹中提供的。
lol.example.com/cat.jpg -> my-bucket/lol/cat.jpg
funny-pics.example.com/cat.jpg -> my-bucket/funny-pics/cat.jpg
Run Code Online (Sandbox Code Playgroud)
通过这种方式,可以从单个存储桶中提供任意数量的子域中的静态内容。
为了访问原始的传入Host标头,即使Lambda函数执行的最终结果是在源头实际看到之前修改该值,也需要将CloudFront配置为将Host标头白名单以转发到源头。
该代码实际上非常简单-以下大多数是解释性注释。
lol.example.com/cat.jpg -> my-bucket/lol/cat.jpg
funny-pics.example.com/cat.jpg -> my-bucket/funny-pics/cat.jpg
Run Code Online (Sandbox Code Playgroud)
请注意,索引文档和来自S3的重定向可能还需要Origin响应触发器,以Location针对原始请求将标头标准化。这将取决于您所使用的S3网站功能。但是以上是一个有效的示例,它说明了总体思路。
请注意,const origin_hostname需要将其设置为在CloudFront原始设置中配置的存储区的端点主机名。在此示例中,存储桶位于us-east-2中,并且网站托管功能处于活动状态。
| 归档时间: |
|
| 查看次数: |
610 次 |
| 最近记录: |