讲师中心 微信公众号
AI工具推荐 视频效率加速

AWS Elastic Beanstalk 与静态资源的分离部署实践指南

小静酱_3293

小静酱_3293

发布时间:2026-11-01 09:51:29

|

223人浏览过

|

来源于php中文网

原创

AWS Elastic Beanstalk 与静态资源的分离部署实践指南

本文介绍如何将 go 后端 api(部署于 elastic beanstalk)与 vue 前端(构建后带哈希的静态资源)彻底解耦,通过 cloudfront + s3 实现高效、低成本、可版本化、全站 https 的前后端分离架构。

本文介绍如何将 go 后端 api(部署于 elastic beanstalk)与 vue 前端(构建后带哈希的静态资源)彻底解耦,通过 cloudfront + s3 实现高效、低成本、可版本化、全站 https 的前后端分离架构。

在现代 Web 应用开发中,前后端分离已成为标准范式。但当使用 AWS Elastic Beanstalk(EB)托管 Go 编写的 RESTful API 时,若将 Vue 构建产物(如 app.7a2bba27be158abd2c91.js)直接打包进同一容器镜像,会导致每次前端样式或 HTML 微调都触发完整容器重建与滚动更新——不仅延长部署时间,还增加 EC2 实例替换频率(丢失 CPU 积分)、浪费计算资源,且违背“关注点分离”原则。

最佳实践:静态资源交由 S3 + CloudFront 托管,API 专注 EB 托管

✅ 核心架构设计

feishu-dingtalk-bridge
feishu-dingtalk-bridge

打通飞书/钉钉开放API,实现日程同步、审批追踪、文档解析与智能待办分发的企业协同中枢

下载
  • 前端域名:https://www.example.com → 指向 CloudFront 分发(Origin 为 S3 静态网站桶)
  • 后端域名:https://api.example.com → 指向 Elastic Beanstalk 环境的 CNAME(如 myapp-env.eba-xxxx.us-east-1.elasticbeanstalk.com)
  • 全链路强制 HTTPS:CloudFront 配置 Viewer Protocol Policy 为 Redirect HTTP to HTTPS;EB 环境启用 SSL 终止(通过 ALB 关联 ACM 证书)
  • API 版本化:/v1/users, /v2/orders 等路径便于灰度与兼容性管理

✅ Vue 构建与部署自动化(CI/CD 示例)
假设使用 GitHub Actions,vue.config.js 已配置 publicPath: '/' 且输出至 dist/,则可编写如下部署流程:

# .github/workflows/deploy-frontend.yml
name: Deploy Frontend to S3 + Invalidate CloudFront
on:
  push:
    branches: [main]
    paths: ['src/**', 'vue.config.js']

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '20'
      - run: npm ci
      - run: npm run build  # 输出至 dist/

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-1

      - name: Sync dist to S3
        run: |
          aws s3 sync ./dist/ s3://my-frontend-bucket/ \
            --delete \
            --cache-control "max-age=31536000,public" \
            --exclude "*" \
            --include "*.js" \
            --include "*.css" \
            --include "*.png" \
            --include "*.jpg" \
            --include "*.svg" \
            --include "index.html"

      - name: Invalidate CloudFront Cache
        run: |
          aws cloudfront create-invalidation \
            --distribution-id ${{ secrets.CF_DISTRIBUTION_ID }} \
            --paths "/*"

⚠️ 关键注意事项

  • S3 桶策略必须允许 CloudFront 以 OAI(Origin Access Identity)方式读取,禁止公开 GET,确保资源仅经 CDN 访问;
  • index.html 的 Cache-Control 设为 no-cache 或 max-age=0,避免 HTML 更新被浏览器/CDN 缓存导致哈希引用失效;
  • Vue Router 使用 history 模式时,需在 S3 静态网站配置「错误文档」为 index.html,并配合 CloudFront 的 Cache Behavior 设置 Viewer Protocol Policy = HTTPS Only 和 Allowed HTTP Methods = GET, HEAD, OPTIONS;
  • EB 后端无需感知前端部署路径:所有 /api/* 请求由 Nginx/ALB 重写或客户端明确指向 https://api.example.com/v1/...,完全规避跨域(CORS)问题。

✅ Elastic Beanstalk 后端零改造适配
Go 应用保持原生 HTTP 服务(如 http.ListenAndServe(":8080", handler)),EB 自动注入 PORT 环境变量并代理至该端口。只需在 .ebextensions/01-nginx.config 中微调反向代理(如需处理 /health 路径):

files:
  "/etc/nginx/conf.d/elasticbeanstalk/01-custom.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      location /health {
        proxy_pass http://127.0.0.1:8080;
      }

最终效果:前端修改 → git push → 30 秒内全球生效;后端迭代 → EB eb deploy → 独立滚动更新。二者解耦、安全、可观测、可伸缩——这才是云原生时代弹性部署的正确打开方式。

热门AI工具

更多
AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

相关专题

更多
Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

100

2026.10.28

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

60

2026.10.28

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

220

2026.10.28

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

140

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

120

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

80

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

60

2026.10.22

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

100

2026.10.22

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

40

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn