在生产环境中,HTTP服务常面临DDoS攻击或CDN回源压力等问题。以下结合Linux工具链与Web服务配置,提供针对性解决方案。
一、DDoS防护:从检测到缓解的完整流程****
场景:服务突然出现大量异常请求,导致带宽耗尽或服务不可用。
解决方案:
1. 实时流量监控与异常检测
1. 使用iftop或nload监控网卡流量,结合Nginx的status模块(stub_status)查看请求速率。
2. 配置fail2ban规则,通过日志匹配(如400 Bad Request频率)自动封禁恶意IP。
2. Nginx层限流与过滤
1. 速率限制:在Nginx配置中启用limit_req模块,限制单个IP的请求频率(如limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s)。
2. 阻断恶意User-Agent:通过map指令和if条件过滤常见扫描工具的User-Agent(如python-requests、Wget等)。
3. 系统层防护
1. 使用iptables限制新连接速率:
2.
bash
3.
4.
| iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 100 -j DROP |
|---|
5.
6. 部署Cloudflare或AWS Shield等云防护服务,分担DDoS流量清洗压力。
二、CDN回源优化:降低源站压力与提升响应速度****
场景:CDN回源请求激增,导致源站带宽或计算资源不足。
解决方案:
1. 静态资源缓存策略
1. 在Nginx中配置长缓存时间(如expires 30d)和Cache-Control头,减少重复回源。
2. 使用proxy_cache_path和proxy_cache指令缓存动态内容(如API响应),需注意缓存一致性(如通过Cache-Control: no-cache或ETag)。
2. 回源限流与优先级控制
1. 通过Nginx的limit_req或ngx_http_limit_conn_module限制CDN节点的并发回源数,避免单节点压垮源站。
2. 为关键业务接口(如支付)配置高优先级,使用limit_req_zone的不同速率限制。
3. 动态回源与健康检查
1. 部署多源站架构,通过upstream模块实现负载均衡,并配置健康检查(如max_fails=3 fail_timeout=30s)。
2. 使用Lua脚本动态切换回源地址(如根据地域或运营商选择最优源站)。
总结****
通过工具链(如fail2ban、iptables)与Web服务(Nginx)的协同配置,可有效应对DDoS攻击;而优化缓存策略、回源限流和动态调度,则能显著降低CDN回源压力。实际场景中需结合监控工具(如Prometheus、ELK)持续优化策略,确保服务高可用。