DDoS攻击(分布式拒绝服务攻击)是现代网络面临的主要安全威胁之一。作为高性能的Web服务器和反向代理,Nginx和Nginx Plus提供了多种机制来帮助抵御这类攻击。
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 10;
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location / {
limit_req zone=one burst=20 nodelay;
}
}
}
limit_conn_zone
定义共享内存区域来存储连接状态limit_conn
限制单个IP的连接数(上例为10)limit_req_zone
定义请求速率限制区域limit_req
限制请求速率(上例为每秒10个请求,突发20个)server {
client_body_timeout 5s;
client_header_timeout 5s;
keepalive_timeout 5s;
send_timeout 5s;
}
这些超时设置可以防止攻击者保持长时间连接消耗资源。
http {
limit_req_zone $binary_remote_addr zone=per_ip:10m rate=10r/s;
limit_req_zone $server_name zone=per_server:10m rate=100r/s;
server {
location / {
limit_req zone=per_ip burst=20 nodelay;
limit_req zone=per_server burst=100;
}
}
}
Nginx Plus支持更复杂的速率限制策略,包括多维度限制。
Nginx Plus的实时活动监控API可以帮助识别攻击模式:
server {
location /api/ {
api write=on;
}
}
通过监控API可以获取: - 当前活动连接 - 请求速率 - 错误率等关键指标
upstream backend {
zone backend 64k;
server 10.0.0.1;
server 10.0.0.2;
sticky cookie srv_id expires=1h;
sticky_learn;
}
限制单个客户端只能与特定后端服务器通信。
geo $blocked_ip {
default 0;
1.2.3.4/24 1;
5.6.7.8 1;
}
server {
if ($blocked_ip) {
return 444;
}
}
map $http_user_agent $bad_agent {
default 0;
"~*bot" 1;
"~*spider" 1;
"~*scan" 1;
}
server {
if ($bad_agent) {
return 403;
}
}
对于可疑流量,可以返回验证码页面:
location / {
error_page 403 = @captcha;
if ($http_cookie !~* "passed_captcha") {
return 403;
}
}
location @captcha {
rewrite ^ /captcha.html;
}
通过合理配置Nginx/Nginx Plus的这些功能,可以显著提高网站对DDoS攻击的抵抗能力,同时保持对正常用户的良好服务体验。