如何在AWS Amplify上为React/Redux应用运行Express代理服务
解决方案说明
首先明确核心原因:AWS Amplify前端托管的运行逻辑是只托管静态构建产物,构建阶段的临时容器会在打包完成后销毁,你在postBuild阶段启动的Express代理、PM2进程都不会在生产环境存活,同时package.json里的proxy字段仅作用于React本地开发服务器,生产构建后完全不生效。
你不需要直接改用EC2实例,有三类更低成本的方案可选,优先推荐第一类:
方案1:使用Amplify自带反向代理规则(成本最低,改动最小)
你当前的Express服务仅实现了/contact接口的转发逻辑,完全可以通过Amplify自带的重定向规则实现,不需要额外运行服务:
- 进入Amplify控制台对应应用的「重写和重定向」配置页
- 新增一条规则:
- 源地址:
/contact - 目标地址:
https://my-aws-lambda-base-url/dev/contact - 类型选择
200(重写),也就是反向代理模式
- 源地址:
- 原有React代码的请求逻辑、Amplify构建脚本都不需要修改,部署后所有发往
/contact的请求会被Amplify自动转发到Lambda地址,既隐藏了真实后端URL,也自动处理跨域问题。
方案2:迁移代理逻辑到Amplify函数(适合后续有更多代理需求的场景)
如果后续你需要更多自定义代理逻辑,可以把当前Express的转发逻辑改写为Amplify REST API对应的Lambda函数,挂载到/contact路径下,Amplify会自动托管该函数的运行、扩缩容,不需要你维护服务器。
方案3:EC2部署Express服务(仅推荐有复杂服务端逻辑的场景)
如果一定要保留完整的Express服务,可以将Express单独部署在EC2/ECS上,再配置Amplify的重定向规则把对应接口请求转发到EC2的公网地址。该方案需要你自行负责EC2的运维、监控、安全配置,成本远高于前两个方案,非必要不选择。
避坑提示
- 永远不要尝试在Amplify的构建脚本中启动常驻进程,构建环境是临时的,所有进程都会在构建完成后被销毁
- React的
proxy配置仅适用于本地开发环境,生产构建后不会生效,不要依赖该配置实现生产代理
内容的提问来源于stack exchange,提问作者0xD1x0n
相关产品推荐
相关产品推荐

