AWS CloudFront + WAF + ALB 实战:从 0 到 1 搭建安全的 Web 架构(附完整 Demo)
前言
在实际的企业项目中,很少会直接把 Web 服务暴露到公网。为了提升网站性能、安全性和可扩展性,AWS 官方推荐使用以下架构:
Internet
│
Route 53(可选)
│
▼
CloudFront(CDN)
│
AWS WAF(安全防护)
│
▼
Application Load Balancer(ALB)
│
┌───────────────┴───────────────┐
│ │
EC2-1 EC2-2
Nginx + Demo Nginx + Demo
本文将带大家一步一步搭建一套完整的 AWS Web 架构,并演示 CloudFront 缓存、WAF 防护以及 ALB 负载均衡的工作流程。
一、整体架构介绍
整个请求流程如下:
用户
│
▼
CloudFront
│
▼
AWS WAF
│
▼
Application Load Balancer
│
▼
EC2 Web Server
各组件职责如下:
| 服务 | 作用 |
|---|---|
| CloudFront | 全球 CDN,加速网站访问,缓存静态资源 |
| AWS WAF | Web 应用防火墙,拦截 SQL 注入、XSS、恶意爬虫等攻击 |
| ALB | 七层负载均衡,支持 HTTPS、路径转发、健康检查 |
| EC2 | 部署业务应用,例如 Nginx、Java、Node.js 等 |
二、创建 EC2 Web 服务器
进入 AWS Console:
EC2
→ Launch Instance
建议配置:
-
Amazon Linux 2023
-
t3.micro
-
20GB EBS
-
Auto Assign Public IP
-
Security Group:
-
TCP 22(SSH)
-
TCP 80(HTTP)
-
启动完成后,使用 SSH 登录服务器:
ssh -i demo.pem ec2-user@公网IP
三、安装 Nginx
更新系统:
sudo dnf update -y
安装 Nginx:
sudo dnf install nginx -y
启动服务:
sudo systemctl enable nginx
sudo systemctl start nginx
修改首页:
sudo vi /usr/share/nginx/html/index.html
替换为:
<html>
<h1>AWS CloudFront Demo</h1>
<h2>Hello AWS!</h2>
<p>Server:EC2-01</p>
</html>
浏览器访问:
http://EC2公网IP
如果页面正常显示,说明 Web 服务部署成功。
四、创建 Application Load Balancer(ALB)
进入:
EC2
→ Load Balancers
→ Create Load Balancer
选择:
Application Load Balancer
配置如下:
-
Internet-facing
-
HTTP
-
Port 80
-
Public Subnet(至少两个可用区)
创建 Target Group:
Protocol:HTTP
Port:80
Health Check:
/
将 EC2 注册到 Target Group。
创建完成后,可以获得一个类似下面的地址:
xxxxx.ap-northeast-1.elb.amazonaws.com
浏览器访问该地址,应该能够正常看到首页。
五、创建 CloudFront Distribution
进入:
CloudFront
→ Create Distribution
Origin 选择:
ALB DNS
Viewer Protocol:
Redirect HTTP to HTTPS
Cache Policy:
CachingOptimized
创建完成后,大约等待 5~10 分钟即可部署完成。
CloudFront 会生成一个新的访问地址:
https://dxxxxxxxx.cloudfront.net
访问该地址,页面应该与 ALB 保持一致。
六、验证 CloudFront CDN 是否生效
打开浏览器开发者工具(F12):
Network
查看响应头:
x-cache
第一次访问:
Miss from cloudfront
表示 CloudFront 回源获取数据。
第二次刷新:
Hit from cloudfront
表示内容已经缓存在 CloudFront 边缘节点,后续请求无需再访问源站。
整个访问流程如下:
第一次访问:
用户
│
CloudFront
│
ALB
│
EC2
第二次访问:
用户
│
CloudFront(缓存)
这就是 CDN 加速的核心原理。
七、CloudFront Cache Invalidation
修改首页内容,例如:
<h1>Hello AWS 2026</h1>
刷新页面后,你会发现内容并没有立即更新。
原因很简单:
CloudFront 仍然返回缓存内容。
进入:
CloudFront
↓
Invalidations
↓
Create Invalidation
输入:
/*
等待几分钟。
再次刷新页面,新内容即可生效。
这也是生产环境发布网站时经常使用的操作。
八、创建 AWS WAF
进入:
AWS WAF
↓
Create Web ACL
Resource:
CloudFront Distribution
然后添加 AWS Managed Rules:
推荐启用:
-
AWS Core Rule Set
-
Known Bad Inputs
-
SQL Injection Rule
-
Linux Rule
-
Anonymous IP List
完成后,将 Web ACL 关联到 CloudFront。
九、演示 SQL Injection 防护
访问:
https://CloudFrontURL/login?id=1 OR 1=1
或者:
?id='
如果命中 SQL Injection 规则,浏览器将返回:
403 Forbidden
进入:
CloudWatch
↓
WAF Logs
即可查看:
-
Source IP
-
Rule Name
-
Blocked
-
Request URI
这说明 WAF 已成功拦截恶意请求。
十、演示 IP 黑名单
创建:
IP Set
加入自己的公网 IP。
然后创建规则:
Block
刷新页面:
403 Forbidden
删除该 IP 后即可恢复访问。
这个功能非常适合屏蔽恶意 IP。
十一、Geo Blocking
如果业务只面向中国、日本、新加坡等地区,可以直接限制其他国家访问。
例如:
Geo Match Rule
Block:
-
Russia
-
North Korea
这样可以减少大量无效流量和恶意扫描。
十二、Rate Limit(CC 防护)
创建 Rate-based Rule:
例如:
100 Requests / 5 minutes
如果同一个 IP 在 5 分钟内超过 100 次请求:
AWS WAF 将自动返回:
403 Forbidden
这就是最常见的 CC 攻击防护方式。
十三、完整请求流程
最终,整个 Web 请求流程如下:
Internet
│
▼
CloudFront
│
▼
AWS WAF
│
▼
ALB
│
▼
EC2
其中:
-
CloudFront:负责全球加速和缓存
-
WAF:负责安全防护
-
ALB:负责流量分发和负载均衡
-
EC2:负责业务运行
整个架构符合 AWS 官方推荐的生产环境部署模式。
总结
通过本文,我们完成了一套完整的 AWS Web 架构搭建,并学习了以下内容:
-
使用 EC2 部署 Nginx 网站
-
创建 Application Load Balancer
-
创建 CloudFront Distribution
-
验证 CDN 缓存(Miss → Hit)
-
使用 Cache Invalidation 刷新缓存
-
创建 AWS WAF Web ACL
-
配置 AWS Managed Rules
-
演示 SQL 注入拦截
-
配置 IP 黑名单
-
配置 Geo Blocking
-
配置 Rate Limit 防护
对于生产环境来说,这套架构不仅能够显著提升网站访问速度,还能有效增强 Web 安全性,是构建现代云应用的经典实践。
如果后续继续扩展,还可以结合 Route 53、AWS Certificate Manager(ACM)、Auto Scaling、Amazon S3、Amazon ECS/EKS 等服务,进一步打造高可用、高性能的企业级云架构。
更多推荐
所有评论(0)