2021-11-03 08:01:16
Nginx 抵御 CC 攻击的限流模块配置主要通过 limit_req 和 limit_conn 实现,结合突发流量控制、细粒度规则及监控优化,可有效缓解攻击压力。 以下是具体配置方法与扩展策略:
一、核心模块配置1. 定义共享内存区域在 http 块中配置 limit_req_zone 和 limit_conn_zone,用于存储限流状态:
http { # 限制请求速率:每个IP每秒1个请求,共享内存10MB limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s; # 限制并发连接数:每个IP最多10个连接,共享内存10MB limit_conn_zone $binary_remote_addr zone=connlimit:10m;}在 server 或 location 块中引用限流区域:
server { location / { # 请求速率限制:突发5个请求,立即拒绝超额请求 limit_req zone=mylimit burst=5 nodelay; # 并发连接数限制:每个IP最多10个连接 limit_conn connlimit 10; # 其他配置(如代理、缓存等) proxy_pass对高风险接口(如API、登录页)设置更严格限制:
location /api/login { limit_req zone=mylimit burst=2 nodelay; limit_conn connlimit 5; # 其他安全配置(如验证码、IP黑名单)}2. 按用户代理(User-Agent)限制过滤恶意爬虫或自动化工具:
map $http_user_agent $limit_bot { default ""; ~*BadBot 1; ~*Scraper 1;}server { location / { if ($limit_bot) { limit_req zone=mylimit burst=1 nodelay; } }}三、自定义限流响应1. 错误页面重定向通过 error_page 返回友好提示,避免暴露服务器信息:
error_page 503 /503.html;location = /503.html { root /usr/share/nginx/html; internal; # 禁止直接访问}2. 返回JSON格式错误(API场景)location /api/ { error_page 503 @api_error; location @api_error { default_type application/json; return 503 '{"code":503,"message":"Request limit exceeded"}'; }}四、参数调优方法1. 基线测试与逐步调整Nginx Plus支持通过API动态修改限流值,无需重启服务:
curl -X POST "}
limit_req_zone $limit_user zone=userlimit:10m rate=5r/s; # 登录用户速率更高
### 五、多层次防御策略#### 1. 结合WAF与验证码- WAF:部署ModSecurity或云WAF(如Cloudflare),拦截SQL注入、XSS等攻击。- 验证码:在关键操作(如登录、支付)前要求人机验证(如Google reCAPTCHA)。#### 2. CDN与边缘防护- CDN缓存:静态资源通过CDN分发,减少源站压力。- 边缘限流:利用CDN的速率限制功能(如AWS CloudFront的Rate Limiting)。#### 3. 黑名单与IP封禁- 实时封禁:通过Fail2ban或自定义脚本分析Nginx日志,自动封禁恶意IP。```bash# 示例:封禁5分钟内请求超过100次的IPawk '/GET /api/ {print $1}' /var/log/nginx/access.log | sort | uniq -c | awk '$1 > 100 {print $2}' | xargs -I {} iptables -A INPUT -s {} -j DROP六、监控与优化1. 日志分析总结:Nginx的 limit_req 和 limit_conn 是防御CC攻击的基础手段,需结合突发控制、细粒度规则和动态调优。通过多层次防御(WAF、CDN、黑名单)和持续监控,可构建更健壮的防护体系。实际配置需根据业务流量特征和攻击模式灵活调整,避免过度限制影响用户体验。