Nginx 如何防止 DDoS 攻击
DDoS(分布式拒绝服务攻击)是许多网站和服务面临的主要威胁。DDoS攻击像是一群恶意用户一起阻塞了你的店门,导致正常用户无法访问。以下是如何利用Nginx防止这种攻击的方法。
一、DDoS 攻击的特点
- 流量来源:攻击流量往往来自固定IP地址,且每个IP创建的连接和请求数远超真实用户。
- 速率:攻击流量由机器生成,速率高于人类用户。
- 请求特征:攻击机器的User-Agent和Referer头可能不标准,容易与攻击关联。
二、Nginx 防止 DDoS 攻击的方法
1. 限制请求率
通过配置限制Nginx可接受的入站请求率,确保真实用户的请求不会被淹没。例如,每个用户每两秒只能访问一次登录页面:
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;
server {
location /loginUser.html {
limit_req zone=one;
...
}
}
2. 限制连接数量
限制每个客户端IP的连接数,确保不超过合理范围。例如,每个IP在/product部分的连接数不超过10个:
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location /product/ {
limit_conn addr 10;
...
}
}
3. 关闭慢连接
通过client_body_timeout和client_header_timeout控制请求体和请求头的超时时间,关闭不必要的慢连接:
server {
client_body_timeout 5s;
client_header_timeout 5s;
...
}
4. 设置 IP 黑名单
识别攻击者的IP地址并通过deny指令阻止其连接:
location / {
deny 124.123.121.3;
deny 124.123.121.5;
...
}
5. 设置 IP 白名单
允许特定IP访问,通过allow和deny指令限制请求来源:
location / {
allow 192.168.122.0/24;
deny all;
...
}
6. 通过缓存削减流量峰值
启用缓存并配置相关参数,以吸收大部分攻击流量峰值。
7. 阻塞特定请求
阻止特定URL、非正常User-Agent或Referer的请求:
location / {
if ($http_user_agent !~* "正常的User-Agent") {
return 403;
}
}
8. 限制对后端服务器的连接数
通过Nginx限制到每个后端服务器的连接数:
upstream website {
server 192.168.100.1:80 max_conns=200;
server 192.168.100.2:80 max_conns=200;
queue 10 timeout=30s;
}