网站被攻击后自动切换维护页面设置方法

2025.5.29 杂七杂八 1731

网站被攻击后自动切换维护页面设置方法

本文详细介绍如何通过Nginx/Apache配置、CDN规则及自动化脚本实现网站被攻击时自动切换至维护页面,包含故障检测逻辑、HTTP状态码优化及SEO友好型维护页面的设计要点。

一、攻击检测与自动切换的核心逻辑

当网站遭遇DDoS、CC攻击或漏洞利用时,可通过以下机制触发维护模式:

 攻击特征检测示例(基于Nginx日志分析)
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
Bash

1.1 基于流量阈值的触发条件

  • 请求频率监控:单个IP每秒请求超过100次
  • 异常状态码:5xx错误率突增300%
  • 带宽占用:出口流量超过日常峰值500%

二、Nginx实现方案

2.1 主配置修改

 /etc/nginx/nginx.conf
http {
    include /etc/nginx/maintenance.conf;
}
nginx

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;
    }
}
nginx

三、Apache实现方案

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{ENV:MAINTENANCE_MODE} ^1$
    RewriteCond %{REQUEST_URI} !^/maintenance.$
    RewriteRule ^.$ /maintenance. [R=503,L]
</IfModule>
Apache

四、自动化切换脚本

!/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"])
Python

五、SEO友好型维护页面设计

  • 返回503 Service Unavailable状态码
  • 包含Retry-After响应头(建议值3600)
  • 保留品牌视觉元素和联系方式
  • 添加进度状态指示器

六、CDN层实现(以Cloudflare为例)

  1. 创建页面规则:.domain.com/
  2. 触发条件:请求数 > 5000/分钟
  3. 执行动作:转发到自定义维护页面

建议结合监控系统(如Prometheus)设置报警阈值,当CPU负载持续5分钟超过80%时自动触发切换机制。

评论