同一域名(无二级域名)部署多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分配
配置步骤
部署后端服务:
- 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用户池,用于登录验证
配置ALB路由规则:
- 创建ALB,绑定ACM证书开启HTTPS监听
- 添加路由规则:
- 路径
/→ 转发到Next.js目标组 - 路径
/blog/*→ 转发到WordPress目标组,设置路径重写去掉/blog前缀 - 路径
/app/*→ 转发到Vite+React目标组,同时在ALB上启用Cognito认证,未登录用户自动跳转到Cognito登录页
- 路径
配置CloudFront:
- 创建CloudFront分配,源指向ALB域名
- 配置缓存策略:对静态资源(如Next.js的静态文件、Vite打包文件)开启缓存,动态内容(WordPress、/app的API)禁用缓存
- 绑定ACM证书到CloudFront,确保全局HTTPS访问
Route 53解析:
- 创建A记录,将
www.mydomain.com指向CloudFront分配的域名
- 创建A记录,将
三、关键注意事项
- WordPress子路径:必须修改WP配置和后台固定链接,避免路径冲突
- 登录保护:生产环境优先用AWS Cognito,比Nginx的htpasswd更安全、更易扩展
- 性能优化:CloudFront缓存静态资源,Next.js开启静态生成,减少后端压力
- 证书管理:所有SSL证书用ACM申请,自动续期,适配CloudFront和ALB
内容的提问来源于stack exchange,提问作者marcob8986
相关产品推荐
相关产品推荐

