我有一个使用 Apache 作为前端、Nodejs 作为后端的 Web 架构。我想将此架构迁移到 AWS。Node.js 将成为 Elastic Beanstalk,Apache 将存储在 Amazon S3 上(它仅存储静态文件)。
我使用这些指令将 /api URL 路径映射到 Apache 中的后端:
<Location /api>
ProxyPass http://localhost:8081/api
</Location>
我想在 AWS 中使用相同的机制。我发现 Amazon S3 无法做到这一点,因为它只是一项存储服务。
我发现Amazon CloudFront
可以使用多个Amazon CloudFront
Origins,可以是Amazon S3
buckets 或Amazon Elastic Load Balancers
。然后,我将使用一个Amazon EC2
来托管我的 Node.js 应用程序后端,并使用Amazon Load Balancer
最终的架构将是
- Amazon Elastic Load Balancer -> Amazon EC2
/api /
/
-->Amazon CloudFront-<
\
else \
- Amazon S3
这种类型的架构是否可行?如果是,这是在 AWS 中实现这种架构的最佳方式吗?
感谢大家的回复!
答案1
是的...使用CloudFront。
当然,它的官方用途是作为缓存 CDN,但它具有根据路径有选择地将请求路由到适当的原始系统的内置功能。
因此,您需要将默认路径配置为 S3,请求将发送到您的存储桶。配置指向 Elastic Beanstalk 部署前面的 Elastic Load Balancer 的第二个源。设置路径模式以/api/*
将请求路由到此第二个源。
如果不需要或不想要,可以禁用缓存行为。
CloudFront 部署被称为“分发”。
http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web.html
这是“最佳”方法吗?这取决于您的专业知识和创造力……但是,如果您希望使用可用的 AWS 组件,那么是的,这可能是可行的方法。它是唯一提供基本上免维护的 http 路径请求路由的组件。(当然,Amazon API 网关也会按路径路由,但它不适合以 S3 作为“通配符”目的地的应用程序。)