1.
总体架构与接入说明
1) 架构图:用户 -> 高防CDN(边缘清洗 + WAF)-> 源站(Nginx/Apache)-> 应用与数据库。
2) DNS策略:使用CNAME接入高防CDN,源站A记录保密,仅供CDN回源,DNS TTL设置为60秒以便切换。
3) 回源协议:建议回源使用HTTP/HTTPS并开启Keep-Alive,回源端口通常为80/443或自定义端口如8080。
4) 白名单:在源站防火墙中仅允许高防CDN的回源IP段访问(例如:10.0.0.0/8为示例),阻止直接公网访问。
5) 请求头:开启X-Forwarded-For或True-Client-IP以记录真实客户端IP,Nginx需配置real_ip模块。
2.
主机(Nginx)配置示例与日志格式
1) Nginx示例配置(关键项):
user www-data;
worker_processes auto;
events { worker_connections 10240; }
http {
set_real_ip_from 10.0.0.0/8;
real_ip_header X-Forwarded-For;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" "$http_user_agent" '
'$request_time $upstream_response_time $http_x_forwarded_for';
access_log /var/log/nginx/access.log main;
}
2) 日志字段示例(单行):
2026-07-01 12:00:00 192.0.2.1 - - "GET /api/v1/pay HTTP/1.1" 200 1234 "-" "Mozilla/5.0" 0.120 0.110 203.0.113.5
3) 建议:将access.log以每10分钟或100M切割并推送至日志采集器。
4) 文件系统:建议源站日志目录使用独立分区,/var/log/nginx 最大保留7天,单文件不超过2GB。
5) 性能:worker_connections与keepalive_requests需根据并发调整,例如并发10万需调整ulimit与worker数。
3.
日志收集链路(Filebeat -> Logstash/Fluentd -> ES)
1) Filebeat采集示例配置:
filebeat.inputs:
- type: log
paths:
- /var/log/nginx/access.log
fields:
env: production
output.logstash:
hosts: ["10.0.10.5:5044"]
2) Logstash过滤示例:使用grok解析上面log_format并加入client_ip字段。
3) 存储策略:在Elasticsearch中按日索引 nginx-access-YYYY.MM.DD,保留周期30天,磁盘阈值70%触发shrink。
4) 日志容量估算:每条日志平均500 bytes,100k rps 全站(持续1小时)会产生约 180GB(100000*3600*0.5),需预估吞吐。
5) 安全:日志传输使用TLS,Filebeat与Logstash之间启用client证书校验。
4.
告警策略与Prometheus示例告警规则
1) 指标采集:在源站部署node_exporter、nginx_exporter,并在CDN侧采集edge metrics(RPS、bandwidth、pps)。
2) 告警工具:Prometheus + Alertmanager + Grafana,Alertmanager用于通知路由(短信/邮箱/钉钉/企业微信)。
3) 样例PromQL与告警阈值:
- alert: HighHTTPRequests
expr: sum(rate(nginx_http_requests_total[1m])) by (instance) > 10000
for: 2m
labels: { severity: critical }
annotations: { summary: "HTTP请求速率异常" }
4) PPS与带宽类告警:
- alert: HighPPS
expr: sum(rate(interface_packets_total[1m])) by (instance) > 200000
for: 1m
5) 动作与自动化:触发Critical后自动执行脚本调整Nginx限速或请求切换到备用机房,并通知运维值班群。
5.
告警示例表格(阈值与处置示例)
| 指标 | 阈值 | 触发时间 | 优先级 | 自动化处置 |
| HTTP RPS(单实例) | > 10,000 rps | 2m | P1 | 切换流量到备用CDN / 执行限速规则 |
| 网络 PPS(口) | > 200,000 pps | 1m | P1 | 触发清洗,启用高阈值ACL |
| 入侵型请求比例 | > 5% (WAF拦截率) | 5m | P2 | 升级WAF规则并拉取样本日志 |
备注:实际阈值需结合业务峰值与基线调整,上表为常见参考值。
6.
真实案例:某在线服务遭遇DDoS并处置流程
1) 背景:某在线教育平台在促销期被发现异常流量,峰值为20Gbps,约250k PPS,HTTP请求峰值15,000 rps。
2) 初步处置:CDN开启全站清洗模式,启用JS挑战、WAF严格模式与源站白名单。
3) 日志与告警:Prometheus触发HighPPS与HighHTTPRequests告警,Alertmanager推送短信与钉钉告警,值班工程师确认后启用脚本。
4) 自动化响应示例(脚本动作):切换DNS到备用CNAME、在Nginx上启用limit_req zone=one burst=200 nodelay,调整keepalive_timeout至5s。
5) 结果:通过高防CDN清洗与限速,10分钟内将源站带宽降至正常(< 500 Mbps),业务经短暂降级后恢复,后续将日志导出做攻击指纹分析并更新WAF策略。
7.
运维建议与落地要点
1) 预案演练:每季度进行一次流量切换与清洗演练,验证告警链路与脚本可靠性。
2) 指标基线:建立正常基线(RPS、latency、错误率),根据历史数据设置动态阈值(如平均值+3σ)。
3) 存储与成本:日志留存策略分级(索引热、暖、冷),避免日志无限制堆积造成ES集群故障。
4) 合作与支持:与高防CDN供应商保持SLA与应急联动通道,获取回源IP白名单与黑洞规则支持。
5) 安全固化:源站关闭不必要端口、启用端口白名单、对管理面使用独立跳板并启用MFA。
来源:高防cdn如何配置主机 日志收集与告警配置示例