
在 Nginx 中配置 DDoS 防护需要结合 流量限制、连接控制、缓存优化 等多层防御策略。以下是经过实战验证的完整方案,涵盖从基础到高级的防护措施:
一、基础防护(HTTP/HTTPS 层)
1. 限制请求速率
http {
# 定义共享内存区(1MB≈1.6万IP状态,rate=10r/s)
limit_req_zone $binary_remote_addr zone=req_flood:10m rate=10r/s;
server {
listen 80;
# 全局请求速率限制(突发50请求)
location / {
limit_req zone=req_flood burst=50 nodelay;
proxy_pass http://backend;
}
# 关键API更严格限制
location /api/login {
limit_req zone=req_flood burst=5 nodelay;
}
}
}
作用:防止高频请求压垮服务器。
2. 限制并发连接数
http {
limit_conn_zone $binary_remote_addr zone=conn_flood:10m;
server {
location / {
limit_conn conn_flood 20; # 单IP最大20并发连接
limit_rate 500k; # 限速500KB/秒
}
}
}
作用:防止单个IP占用过多连接资源。
二、高级防护(网络层与应用层)
1. 封禁恶意IP/IP段
# 创建黑名单文件 /etc/nginx/blockips.conf
deny 192.168.1.100;
deny 10.0.0.0/8;
# 在Nginx配置中引入
http {
include /etc/nginx/blockips.conf;
}
动态封禁:结合 fail2ban
或脚本自动更新黑名单。
2. 启用SYN Cookie防御SYN Flood
# 在/etc/sysctl.conf中设置
net.ipv4.tcp_syncookies = 1
sysctl -p
作用:缓解TCP半连接攻击。
3. 限制特定User-Agent(如恶意爬虫)
map $http_user_agent $block_ua {
default 0;
"~*(wget|curl|nikto|sqlmap)" 1;
}
server {
if ($block_ua) {
return 403;
}
}
三、反向代理优化
1. 缓冲与超时设置
location / {
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 16k;
proxy_busy_buffers_size 24k;
# 快速失败避免阻塞
proxy_connect_timeout 3s;
proxy_read_timeout 3s;
}
作用:防止慢速攻击(Slowloris)。
2. 关闭非必要HTTP方法
location / {
limit_except GET POST {
deny all;
}
}
四、系统级加固
1. 调整内核参数
# /etc/sysctl.conf
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.core.somaxconn = 65535
生效命令:sysctl -p
2. 限制文件描述符
# /etc/security/limits.conf
nginx soft nofile 65535
nginx hard nofile 65535
五、完整配置示例
http {
# 基础限流
limit_req_zone $binary_remote_addr zone=req_flood:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn_flood:10m;
# 黑名单
include /etc/nginx/blockips.conf;
server {
listen 80;
# 全局防护
limit_req zone=req_flood burst=50 nodelay;
limit_conn conn_flood 20;
# 静态资源宽松策略
location ~* .(jpg|css|js)$ {
limit_req zone=req_flood burst=100;
expires 7d;
}
# 动态接口严格防护
location /api/ {
limit_req zone=req_flood burst=5;
limit_conn conn_flood 5;
proxy_pass http://backend;
}
# 封禁扫描器
if ($http_user_agent ~* (nikto|sqlmap)) {
return 444;
}
}
}
六、验证与监控
测试防护效果
# 模拟攻击(需安装siege) siege -c 100 -t 60s http://example.com/api/
监控日志
tail -f /var/log/nginx/error.log | grep 'limiting requests'
实时状态查看
location /nginx_status { stub_status on; allow 127.0.0.1; deny all; }
七、云环境补充方案
- 启用Cloudflare/WAF
- 在Nginx前部署CDN,启用5秒盾、JS挑战等。
- 弹性扩容
- 使用Kubernetes或云厂商的自动伸缩组(Auto Scaling)。
总结
- 轻度攻击:Nginx限流+连接控制即可缓解。
- 大规模DDoS:需结合云WAF、Anycast清洗和ISP协作。
- 持续优化:根据业务流量模式调整阈值,避免误杀正常用户。
学在每日,进无止境!更多精彩内容请关注微信公众号。

原文出处:
内容由AI生成仅供参考,请勿使用于商业用途。如若转载请注明原文及出处。
出处地址:http://www.07sucai.com/tech/966.html
版权声明:本文来源地址若非本站均为转载,若侵害到您的权利,请及时联系我们,我们会在第一时间进行处理。