本文详细介绍如何通过Nginx/Apache配置、CDN规则及自动化脚本实现网站被攻击时自动切换至维护页面,包含故障检测逻辑、HTTP状态码优化及SEO友好型维护页面的设计要点。
一、攻击检测与自动切换的核心逻辑
当网站遭遇DDoS、CC攻击或漏洞利用时,可通过以下机制触发维护模式:
攻击特征检测示例(基于Nginx日志分析)
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
1.1 基于流量阈值的触发条件
- 请求频率监控:单个IP每秒请求超过100次
- 异常状态码:5xx错误率突增300%
- 带宽占用:出口流量超过日常峰值500%
二、Nginx实现方案
2.1 主配置修改
/etc/nginx/nginx.conf
http {
include /etc/nginx/maintenance.conf;
}
2.2 维护模式配置
/etc/nginx/maintenance.conf
geo $maintenance {
default 0;
include /etc/nginx/attack_ips.conf;
}
server {
if ($maintenance) {
return 503;
}
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.)$ /maintenance. break;
}
}
三、Apache实现方案
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{ENV:MAINTENANCE_MODE} ^1$
RewriteCond %{REQUEST_URI} !^/maintenance.$
RewriteRule ^.$ /maintenance. [R=503,L]
</IfModule>
四、自动化切换脚本
!/usr/bin/env python3
import psutil, subprocess
def check_attack():
net_io = psutil.net_io_counters()
return net_io.bytes_sent > 10_000_000 10MB/s阈值
if check_attack():
subprocess.run(["nginx", "-s", "reload"])
五、SEO友好型维护页面设计
- 返回503 Service Unavailable状态码
- 包含Retry-After响应头(建议值3600)
- 保留品牌视觉元素和联系方式
- 添加进度状态指示器
六、CDN层实现(以Cloudflare为例)
- 创建页面规则:.domain.com/
- 触发条件:请求数 > 5000/分钟
- 执行动作:转发到自定义维护页面
建议结合监控系统(如Prometheus)设置报警阈值,当CPU负载持续5分钟超过80%时自动触发切换机制。
评论