编程 Nginx 如何防止 DDoS 攻击

2024-11-18 21:51:48 +0800 CST views 1123

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

推荐文章

html一些比较人使用的技巧和代码
2024-11-17 05:05:01 +0800 CST
Golang - 使用 GoFakeIt 生成 Mock 数据
2024-11-18 15:51:22 +0800 CST
微信小程序热更新
2024-11-18 15:08:49 +0800 CST
Vue中的样式绑定是如何实现的?
2024-11-18 10:52:14 +0800 CST
html一个包含iPhoneX和MacBook模拟器
2024-11-19 08:03:47 +0800 CST
pin.gl是基于WebRTC的屏幕共享工具
2024-11-19 06:38:05 +0800 CST
HTML5的 input:file上传类型控制
2024-11-19 07:29:28 +0800 CST
LLM驱动的强大网络爬虫工具
2024-11-19 07:37:07 +0800 CST
404错误页面的HTML代码
2024-11-19 06:55:51 +0800 CST
如何在Vue3中处理全局状态管理?
2024-11-18 19:25:59 +0800 CST
Go中使用依赖注入的实用技巧
2024-11-19 00:24:20 +0800 CST
FastAPI 入门指南
2024-11-19 08:51:54 +0800 CST
Python上下文管理器:with语句
2024-11-19 06:25:31 +0800 CST
动态渐变背景
2024-11-19 01:49:50 +0800 CST
html一个全屏背景视频
2024-11-18 00:48:20 +0800 CST
10个极其有用的前端库
2024-11-19 09:41:20 +0800 CST
记录一次服务器的优化对比
2024-11-19 09:18:23 +0800 CST
html文本加载动画
2024-11-19 06:24:21 +0800 CST
Golang Select 的使用及基本实现
2024-11-18 13:48:21 +0800 CST
PHP设计模式:单例模式
2024-11-18 18:31:43 +0800 CST
全新 Nginx 在线管理平台
2024-11-19 04:18:33 +0800 CST
全栈利器 H3 框架来了!
2025-07-07 17:48:01 +0800 CST
程序员茄子在线接单