You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一域名(无二级域名)部署多Web应用的实现方案及AWS架构咨询

同一域名下部署多Web应用的AWS实现方案

你要在同一域名下按路径区分不同应用,核心思路是通过路径路由把不同URL前缀的请求转发到对应的后端服务,在AWS上有两种主流实现方式:自定义Nginx代理,或者用AWS托管服务(更省心)。

一、基于自定义Nginx的AWS架构

适合需要完全控制路由逻辑的场景,架构组成如下:

  • 运行Nginx的EC2实例(或ECS容器):作为反向代理入口
  • 后端服务:
    • Next.js营销页:部署在EC2/ECS,或用Amplify托管(需确保Nginx能转发到其地址)
    • WordPress:用EC2/Lightsail实例,搭配RDS数据库
    • Vite+React应用:部署在EC2/ECS,或打包后放S3(但需登录保护,更适合搭配ECS)
  • Route 53:把www.mydomain.com指向Nginx实例的弹性IP(或ECS对应的ALB)

Nginx核心配置示例

server {
    listen 443 ssl;
    server_name www.mydomain.com;
    ssl_certificate /path/to/acm-cert.pem; # 用ACM导出的证书
    ssl_certificate_key /path/to/acm-key.pem;

    # 根路径 → Next.js营销页
    location / {
        proxy_pass http://nextjs-service:3000; # 替换为你的Next.js服务地址
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # /blog → WordPress
    location /blog {
        proxy_pass http://wordpress-service; # 替换为WordPress服务地址
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        rewrite ^/blog(/.*)$ $1 break; # 去掉路径前缀,适配WordPress内部路由
    }

    # /app → 带登录保护的Vite+React应用
    location /app {
        proxy_pass http://vite-react-service:5173; # 替换为Vite应用服务地址
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        
        # 简单密码验证(生产环境推荐用AWS Cognito)
        auth_basic "请登录访问";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

部署要点

  • 给Nginx实例配置安全组:开放80/443端口,只允许互联网的HTTP/HTTPS请求
  • 后端服务安全组:允许Nginx实例的IP访问对应端口(比如Next.js的3000,WordPress的80)
  • SSL证书:用AWS Certificate Manager(ACM)申请免费证书,导出后配置到Nginx;或把Nginx放在ALB后面,由ALB处理SSL(更推荐,不用手动管理证书)

二、基于AWS托管服务的架构(生产环境更推荐)

不用自己维护Nginx,依赖AWS原生服务实现路由,架构更稳定:

  • CloudFront:全局CDN入口,处理SSL、缓存和全球加速
  • Application Load Balancer(ALB):核心路由组件,按路径转发请求到不同后端
  • 后端目标组:
    • Next.js:用Amplify托管,或ECS/EC2实例组成的目标组
    • WordPress:EC2/Lightsail实例目标组,搭配RDS数据库
    • Vite+React:打包后放S3静态托管(目标组指向S3),或ECS实例目标组;用AWS Cognito做登录保护
  • Route 53:把域名指向CloudFront分配

配置步骤

  1. 部署后端服务:

    • Next.js:用Amplify一键部署,获取其访问域名;或在ECS上部署后创建目标组
    • WordPress:部署完成后,修改wp-config.php添加define('WP_HOME', 'https://www.mydomain.com/blog');和define('WP_SITEURL', 'https://www.mydomain.com/blog');,适配子路径
    • Vite+React:打包后上传到S3桶,开启静态网站托管;同时创建Cognito用户池,用于登录验证
  2. 配置ALB路由规则:

    • 创建ALB,绑定ACM证书开启HTTPS监听
    • 添加路由规则:
      • 路径/ → 转发到Next.js目标组
      • 路径/blog/* → 转发到WordPress目标组,设置路径重写去掉/blog前缀
      • 路径/app/* → 转发到Vite+React目标组,同时在ALB上启用Cognito认证,未登录用户自动跳转到Cognito登录页
  3. 配置CloudFront:

    • 创建CloudFront分配,源指向ALB域名
    • 配置缓存策略:对静态资源(如Next.js的静态文件、Vite打包文件)开启缓存,动态内容(WordPress、/app的API)禁用缓存
    • 绑定ACM证书到CloudFront,确保全局HTTPS访问
  4. Route 53解析:

    • 创建A记录,将www.mydomain.com指向CloudFront分配的域名

三、关键注意事项

  • WordPress子路径:必须修改WP配置和后台固定链接,避免路径冲突
  • 登录保护:生产环境优先用AWS Cognito,比Nginx的htpasswd更安全、更易扩展
  • 性能优化:CloudFront缓存静态资源,Next.js开启静态生成,减少后端压力
  • 证书管理:所有SSL证书用ACM申请,自动续期,适配CloudFront和ALB

内容的提问来源于stack exchange,提问作者marcob8986

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:37:52