如何配置AWS架构实现用户访问S3、EC2的HTTP原域名时跳转至CloudFront的HTTPS站点
AWS源站自动重定向到CloudFront HTTPS配置方案
1 S3存储桶(React应用)侧配置
- 首先开启S3桶的静态网站托管功能,进入S3控制台对应桶的「属性」 tab,拉到最下方找到静态网站托管选项开启
- 在静态网站托管的「重定向规则」栏填入如下JSON配置,将所有源站访问请求301重定向到你的CloudFront HTTPS域名,注意替换示例中的CloudFront域名为你自己的:
[ { "Condition": { "HttpErrorCodeReturnedEquals": "403" }, "Redirect": { "HostName": "你的CloudFront分发域名,例:d1234567890.cloudfront.net", "Protocol": "https", "HttpRedirectCode": "301" } }, { "Condition": { "HttpErrorCodeReturnedEquals": "404" }, "Redirect": { "HostName": "你的CloudFront分发域名,例:d1234567890.cloudfront.net", "Protocol": "https", "HttpRedirectCode": "301" } } ]
- 额外安全加固:给S3桶配置CloudFront源访问控制(OAC),关闭S3桶的公开访问权限,确保只有CloudFront可以正常读取S3桶内容,用户直接访问S3源站只会触发重定向或者权限拒绝。
2 EC2(Node.js服务)侧配置
你可以根据自己的部署情况选以下任意一种方式实现重定向:
2.1 Node.js代码层实现(Express框架为例)
添加全局中间件,识别直接访问EC2源站的请求做重定向,示例代码如下:
app.use((req, res, next) => { // 替换为你的EC2公网域名/IP、对应CloudFront域名 const sourceHosts = ['你的EC2公网IP', '你的EC2公网域名']; const targetHost = '你的Node服务对应的CloudFront域名'; if (sourceHosts.includes(req.hostname) || req.protocol === 'http') { return res.redirect(301, `https://${targetHost}${req.originalUrl}`); } next(); });
2.2 Nginx反向代理层实现(如果你用Nginx做Node.js的前置代理)
在Nginx配置文件的server块中添加如下规则:
server { listen 80; server_name 你的EC2公网IP 你的EC2公网域名; return 301 https://你的Node服务对应的CloudFront域名$request_uri; }
- 额外安全加固:修改EC2关联的安全组入站规则,仅允许CloudFront的IP段访问你Node服务暴露的端口,从网络层面禁止用户直接访问EC2源站。
3 配置验证
- 直接在浏览器访问S3的原生静态网站HTTP域名,确认自动跳转到对应的CloudFront HTTPS域名
- 访问EC2的公网IP/HTTP域名,确认自动跳转到Node服务对应的CloudFront HTTPS域名
- 可通过
curl -I http://你的源站地址命令查看返回头,确认返回301 Moved Permanently状态码,且Location字段为目标CloudFront HTTPS地址
内容的提问来源于stack exchange,提问作者dl1
相关产品推荐
相关产品推荐

