DDoS:Distributed Denial of Service,即分布式拒绝服务攻击。借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。通常,攻击者使用一个偷窃帐号将DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在网络上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。
它利用多台被黑客控制的计算机(通常称为“僵尸网络”或“僵尸机”)向目标发送大量请求,从而耗尽目标服务器的带宽、系统资源或服务能力,导致合法用户无法访问该服务。
nginx可以通过limit_conn_zone 和limit_req_zone两个组件来对客户端访问目录和文件的访问频率和次数进行限制,另外还可以善用进行服务安全加固,两个模块都能够对客户端访问进行限制,具体如何使用要结合公司业务环境进行配置。
# 语法配置
Syntax: limit_conn_zone key zone=name:size;
Default: —
Context: http
# 示例
limit_conn_zone $binary_remote_addr zone=addr:10m;
# 语法配置
Syntax: limit_conn zone number;
Default: —
Context: http, server, location
# 示例
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location /download/ {
limit_conn addr 1;
}
limit_conn
能在http
、server
、 location
三个块中使用,但是需要注意的是要搭配前面提及的limit_conn_zone
limit_conn
指令的变量只有zone
和number
两个zone
就是前面的limit_conn_zone
中的name
变量,也就是对应着全局唯一的zone
,负责确定限制连接数的依据number
就是限制的连接数,zone和number组合就可以完成连接数的限定功能,注意这里的number必须使用数字而不能使用变量limit_rate 指令是用来操控发送至客户端的数据传输速度的,它可以约束整个衔接的流量,也可以约束单个客户端拜访速度。
Syntax:limit_rate rate;
Default:limit_rate 0;
Context:http, server, location, if in location
限制发向客户端响应的数据的速率。单位是BYTES每秒。默认值0表示不进行速率限制。此限制是针对每一个连接请求而言的,所以,如果客户端同时有并行的n个连接,那么这个客户端的整体速率就是n倍的limit_rate。
limit_rate 1k;
在传输完一定数量的BYTES之后设开始实施带宽控制。与指令limit_rate一样,后面的参数数值可以通过变量来设置。
Syntax:limit_rate_after size;
Default:limit_rate_after 0;
Context:http, server, location, if in location
指令limit_rate_after只有在配置了limit_rate的前提下才能生效。如果只配置limit_rate_after则不会有带宽控制的效果。
location /test/ {
limit_rate_after 500k;
limit_rate 50k;
}
如果同时配置了sendfile_max_chunk 指令,按照两者较小的数值进行带宽控制。
定义一个以IP为限制请求的方式,名字为req_limit_zone,开辟10M的共享内存区域,每秒处理的速率为10个请求
limit_req_zone $binary_remote_addr zone=req_limit_zone:10m rate=10r/s;
说明 :limit_req_zone指令通常在 HTTP 块中定义,使其可在多个上下文中使用,它需要以下三个参数:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
location /login/ {
limit_req zone=mylimit;
proxy_pass http://my_upstream;
}
}
limit_req指令来将其限制应用于特定location或server块。
limit_req zone=req_limit_zone burst=10 nodelay;
也就是说,如果从一个给定 IP 地址发送 11 个请求,Nginx 会立即将第一个请求发送到上游服务器群,然后将余下 10 个请求放在队列中。然后每 100 毫秒转发一个排队的请求,只有当传入请求使队列中排队的请求数超过 10 时,Nginx 才会向客户端返回503。
limit_req zone=name [burst=number] [nodelay | delay=number];
location /login/ {
limit_req zone=mylimit burst=20 nodelay;
proxy_pass http://my_upstream;
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。