如何通过路径路由将请求转发至多个AWS Amplify应用?
解决AWS Amplify多应用同一域名路径转发的方案
方案1:CloudFront + Lambda@Edge(推荐AWS原生方案)
这是最适配Amplify场景的托管式方案,无需维护额外服务器:
- 配置步骤:
- 记录两个Amplify应用的默认域名(如
app1.amplifyapp.com、app2.amplifyapp.com)。 - 创建CloudFront分发,添加两个自定义源:源类型选
Custom Origin,源域名分别填入两个Amplify的域名,HTTPS端口设为443。 - 配置CloudFront行为规则:
- 针对路径模式
/app1/*,关联第一个Amplify源; - 针对路径模式
/app2/*,关联第二个Amplify源; - 默认行为可指向其中一个应用,或返回404。
- 针对路径模式
- 将主域名绑定到CloudFront分发:通过Route 53配置域名解析到CloudFront分配域名,同时在ACM中申请主域名的SSL证书并关联到CloudFront。
- 可选优化:用Lambda@Edge在Viewer Request阶段重写路径前缀(比如把
/app1/page转发到Amplify的/page),确保Amplify应用能正确识别路由。
- 记录两个Amplify应用的默认域名(如
- 优势:全托管服务,可靠性高;自动处理HTTPS和证书;支持复杂路径逻辑,无额外运维成本。
- 注意:若Amplify应用关联了API网关或后端服务,需为这些路径单独配置CloudFront行为,确保请求正确转发。
方案2:ALB + EC2反向代理(自定义场景适用)
如果需要高度自定义的转发逻辑,可通过EC2做反向代理配合ALB实现:
- 配置步骤:
- 启动EC2实例,安装Nginx(或Apache)作为反向代理服务。
- 编写Nginx配置实现路径转发:
server { listen 80; server_name your-main-domain.com; location /app1/ { proxy_pass https://app1.amplifyapp.com/; proxy_set_header Host app1.amplifyapp.com; proxy_set_header X-Forwarded-Proto $scheme; # 重写路径,移除/app1前缀 rewrite ^/app1/(.*)$ /$1 break; } location /app2/ { proxy_pass https://app2.amplifyapp.com/; proxy_set_header Host app2.amplifyapp.com; proxy_set_header X-Forwarded-Proto $scheme; rewrite ^/app2/(.*)$ /$1 break; } } - 创建ALB,配置HTTPS证书(ACM),将目标组指向EC2实例的80端口。
- 将主域名解析到ALB的DNS地址。
- 优势:支持任意复杂的转发、重写逻辑;适合有EC2运维经验的团队。
- 劣势:需要维护EC2实例,包括扩容、更新、故障排查,增加运维成本;需配置Auto Scaling Group保障可用性。
方案3:Amplify自定义域名 + 重写规则(有限场景备选)
仅适合两个应用均为单页应用、资源路径全为相对路径的场景:
- 配置步骤:
- 为其中一个Amplify应用绑定主域名。
- 在该应用的Amplify控制台中添加重写和重定向规则:
- 源地址:
/app2/<*> - 目标地址:
https://app2.amplifyapp.com/<*> - 类型选择
200 (Rewrite)
- 源地址:
- 局限性:Amplify的重写规则是前端层面的转发,若第二个应用使用绝对路径加载资源,会导致资源请求失败(请求会发送到主域名的
/app2路径而非Amplify域名),兼容性有限。
内容的提问来源于stack exchange,提问作者Ramon Paris
相关产品推荐
相关产品推荐

