在AWS中实现通配符域名托管多静态站点的迁移方案咨询
嘿,我之前刚好做过几乎一模一样的迁移,给你整理几个AWS上的等效实现方案,都是在生产环境验证过的,你可以根据自己的需求来选:
方案1:CloudFront + S3(无服务器架构,推荐纯静态站点)
这是成本最低、维护量最少的方案,完全不需要管理服务器,适合纯静态的站点:
- 第一步:申请通配符SSL证书
去AWS Certificate Manager(ACM)申请*.domain.com的证书,注意如果要用CloudFront,证书必须在us-east-1(弗吉尼亚北部)区域创建,CloudFront只认这个区域的证书。申请时选择DNS验证,Route 53会自动帮你添加验证记录,等几分钟就能通过。 - 第二步:准备S3存储
创建一个全局唯一的S3桶(比如static-domain-com),然后在桶里为每个子域名创建对应的文件夹,比如myapp、blog,把原来对应子域名的静态文件上传到各自的文件夹里。记得把桶的静态网站托管打开,或者直接用CloudFront作为访问入口(更安全)。 - 第三步:配置CloudFront分发
创建CloudFront分发,起源设置为刚才的S3桶,然后在“设置”里添加CNAME为*.domain.com,选择你刚申请的ACM证书。 - 第四步:用Lambda@Edge实现子域名路由
因为CloudFront默认不会根据子域名自动路由到S3的对应文件夹,所以需要写个简单的Lambda@Edge函数,在请求到达时修改路径:
编写Node.js函数(要在us-east-1区域创建,然后关联到CloudFront):
在CloudFront分发的“行为”里添加触发器,选择“查看器请求”阶段关联这个Lambda函数。exports.handler = (event, context, callback) => { const request = event.Records[0].cf.request; const host = request.headers.host[0].value; const subdomain = host.split('.')[0]; // 跳过根域名(domain.com)的情况,如果你不需要根域名可以删掉这段 if (subdomain !== 'domain') { request.uri = `/${subdomain}${request.uri}`; } callback(null, request); }; - 第五步:Route 53解析配置
去Route 53的域名托管区,创建一条通配符A记录,把*.domain.com指向CloudFront分发的域名。
方案2:ALB + EC2(保留原有Nginx架构,迁移改动最小)
如果你不想改动原来的Nginx配置,只想把服务器迁到AWS,这个方案最适合:
- 第一步:申请区域级SSL证书
在ACM里和你的EC2/ALB同区域申请*.domain.com的证书,同样用DNS验证。 - 第二步:迁移Nginx到EC2
启动EC2实例(选合适的实例类型,比如t3.micro足够小流量),安装Nginx,直接复制原来的配置文件,比如:
把原来的静态文件同步到EC2的server { listen 80; server_name *.domain.com; root /var/www/$host/public; index index.html index.htm; location / { try_files $uri $uri/ =404; } }/var/www/myapp.domain.com/public这类路径下,和原来完全一致。 - 第三步:配置Application Load Balancer(ALB)
创建ALB,配置HTTPS(443端口)监听,关联刚才的ACM证书,然后把EC2实例注册到ALB的目标组里。如果需要高可用,可以多启动几个EC2实例,或者配置Auto Scaling Group自动扩容缩容。 - 第四步:Route 53解析
在Route 53创建通配符A记录,指向ALB的DNS名称。
方案3:AWS Amplify(适合现代静态框架站点,如Vue/React)
如果你用的是React、Vue这类现代框架构建的静态站点,Amplify是最省心的方案,自动处理部署、缓存、SSL:
- 第一步:关联代码仓库
在Amplify控制台创建应用,关联你的GitHub/GitLab代码仓库,Amplify会自动检测框架并生成部署配置。 - 第二步:绑定通配符域名
进入Amplify的“域名管理”,添加自定义域名*.domain.com,按照提示在Route 53添加CNAME记录验证域名所有权。 - 第三步:子域名绑定
对于每个子域名(比如myapp.domain.com),可以创建一个单独的Amplify应用,或者用分支部署(比如myapp分支对应myapp.domain.com),直接在域名管理里绑定对应的子域名即可,Amplify会自动部署并配置SSL。
一些关键注意点
- 域名验证:不管用哪个方案,ACM证书的DNS验证都需要在Route 53添加对应记录,Route 53和ACM集成后会自动帮你添加,不用手动操作。
- 缓存策略:CloudFront和Amplify都有默认缓存策略,你可以根据静态资源的更新频率调整缓存时间,比如图片、JS/CSS可以设置较长的缓存时间,HTML设置较短的。
- 成本对比:CloudFront+S3成本最低,适合小流量站点;ALB+EC2成本稍高,但灵活性强;Amplify按使用量计费,适合快速迭代的项目。
内容的提问来源于stack exchange,提问作者Grant
相关产品推荐
相关产品推荐

