在AWS上与Laravel API分离部署Vue.js应用的高性能解决方案咨询
AWS环境下Vue + Laravel分离部署高性能方案
你遇到的S3托管Vue刷新404问题是history路由模式的共性问题,通过标准配置即可解决,以下是经过验证的生产级高性能部署方案:
核心架构:CloudFront + S3 托管前端 + 原有EB托管API
这是AWS生态下成本最低、性能最高的分离部署方案,静态资源访问延迟可低至几十毫秒,完全不影响原有Laravel服务的运行。
解决S3路由刷新报错的配置
- 开启S3的静态网站托管功能,在「静态网站托管」配置项中,将索引文档设为
index.html,错误文档也设为index.html - 额外配置S3存储桶的权限,关闭公共访问,仅允许CloudFront的服务角色读取存储桶内容,避免存储桶暴露
- 在CloudFront中配置自定义错误响应:分别添加403、404错误的自定义规则,设置「HTTP响应代码」为200,「响应页路径」为
/index.html,即可保证所有路由请求都正确返回入口文件
前后端请求配置(两种可选)
方案1:前后端同域名(无跨域,推荐)
在CloudFront中配置双源和路由行为:
- 默认源指向存储Vue资源的S3桶,处理所有静态资源请求
- 新增API源指向原有EB的负载均衡域名,添加行为规则匹配
/api/*路径,缓存策略选择禁用缓存,所有/api开头的请求直接转发到Laravel服务 - 该方案下前后端共用同一个域名,不需要额外配置CORS,也不会出现跨域鉴权的问题
方案2:前后端不同域名
- 前端用独立域名解析到CloudFront,API用原有独立域名
- 在Laravel的CORS配置中添加前端域名到允许列表,若使用Sanctum做用户鉴权,需要将前端域名添加到
SANCTUM_STATEFUL_DOMAINS环境变量中
优化建议
- Vue打包时开启资源哈希,配置不同资源的CloudFront缓存TTL:带哈希的js/css/图片资源可设置长缓存(7-30天),
index.html设置短缓存或者不缓存,保证版本更新及时生效 - 开启CloudFront的自动压缩功能,可减少60%以上的静态资源传输体积,提升加载速度
备选方案:ECS Fargate托管Vue应用
如果有自定义Nginx配置、服务端渲染等特殊需求,可以将Vue打包后基于Nginx构建镜像,在Nginx配置中添加try_files $uri $uri/ /index.html;规则解决路由问题,部署到ECS Fargate后挂载到负载均衡即可,该方案灵活性更高,但成本和维护复杂度高于S3+CloudFront方案。
内容的提问来源于stack exchange,提问作者user2080049
相关产品推荐
相关产品推荐

