怎么设置nginx限流

一、限流nginx设置

nginx限流使用模块 upstream

放置在http模块 #限流并发

upstream node{
server 127.0.0.1:8080 max_conns=1;

}

如何设置nginx限流教你避免DDoS攻击!

#超出的请求会返回502状态码

放置在server模块

#测试地址,访问服务器py路径会转发到本机的8080端口

location /py {
proxy_pass http://node/;

}

#错误重定向到降级界面

error_page 502 503 https://fund/b.html;

注意:如果少了一个/ 会将请求转发到8080的/py路径下

proxy_pass http://node;

二、准备测试环境

开启8080端口,使用web.py 开启一个简单的端口

安装web.py

pip install web.py==0.40-dev1

编写网站脚本webtest.py

import web

urls = (
'
/'
, '
index'
)

class index:
def GET(self):
return "
Hello, world!"
if __name__ == "
__main__"
:
app = web.application(urls, globals())
app.run()

运行脚本启动端口 python webtest.py 0.0.0.0:8080 启动8080端口允许任何IP访问

三、测试限流配置

使用jmeter测试

1、限流设置为并发连接数1

请求

结果

并发请求5,发送100次,共500个请求,成功367,失败133

并发请求10.发送100次,共1000个请求,成功566,失败434

并发请求20.发送100次,共2000个请求,成功848,失败1152



前言:
随着互联网的高速发展,DDoS攻击已经成为了众多互联网企业不可避免的安全威胁之一。在这种情况下,为了应对这种攻击,我们需要将服务器的安全防御做好。
为了帮助大家更好地保护服务器安全,本文将介绍如何使用nginx进行限流设置,防止大量请求导致服务器瘫痪。
正文:
1. 了解nginx的限流功能
nginx是一款高性能的Web服务器软件,开源免费且性能优异,目前已经成为了互联网运营的主流选择之一。而在其高性能之外,nginx还具备良好的反向代理和HTTP缓存功能,此外限流功能也是其重要特性之一。
在nginx中,限流可以通过两个模块实现,分别是limit_conn和limit_req。其中,limit_conn是用来限制客户端连接数量的,而limit_req则是用来限制客户端请求速率的。
2. 设置limit_conn规则
limit_conn模块可以限制连接数量,防止被恶意软件利用TCP握手等一些资源造成的拒绝服务攻击。本文将介绍如何使用limit_conn规则设置nginx限流。
为了限制客户端连接数量,我们需要在nginx配置中加入以下代码:
http{
limit_conn_zone $binary_remote_addr zone=addr:10m;
# 按IP限流
server {
listen 80;
limit_conn addr 10; # 限制单个IP最大连接数
limit_conn_status 503; # 连接过量时的错误状态码
# 以下是nginx配置的其他内容
...
}}
}
上面的代码中,我们首先创建了名为addr的限流区域。其中$binary_remote_addr指的是客户端的IP地址,后面的zone=addr:10m则用来指定这个限流区域的大小(10m)。
接着,我们在nginx的server区块中加入limit_conn addr 10。其中,addr是限流区域的名称,10则表示单个IP最大连接数。最后,通过limit_conn_status 503来设置用户请求过度的服务器响应状态码。
通过以上设置,我们已经成功完成了limit_conn规则的设置。
3. 设置limit_req规则
除了使用limit_conn规则来限制客户端连接数量外,我们还可以使用limit_req模块设置nginx限制客户端请求速率。下面,我们将介绍如何设置limit_req规则。
为了限制客户端请求速率,我们需要在nginx配置中加入以下代码:
http{
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
# 按IP限速
server {
listen 80;
limit_req zone=one burst=20 nodelay; # 限制每秒请求10个,超过则浪费,不保留到下一秒
limit_req_status 503; # 连接过量时的错误状态码
# 以下是nginx配置的其他内容
...
}}
}
上面的代码中,我们首先创建了名为one的限速区域,并使用$binary_remote_addr指定了限速区域的单个客户端IP。
next,我们使用rate=10r/s来设置每秒最大请求频率为10,也就是每秒10个请求。
最后,我们通过limit_req zone=one burst=20 nodelay来设置请求超过上限时的操作。具体来说,这个参数表示如果超过了每秒10个的请求,那么后面的请求不会被缓存到下一秒,而直接被丢弃。而“burst=20”则表示如果客户端在某一个时间导致请求超过了规定的速率,后面可以继续请求20次。
最后在nginx配置中设置limit_req_status 503时,如果客户端请求过多,那么会向客户端返回503错误码。
结尾:
通过以上介绍,我们已经成功掌握了如何使用nginx进行限流设置,避免DDoS攻击。在日常开发中,我们应该充分利用好nginx的限流功能,提高服务器的安全性,让互联网更加稳定和安全。
如果您对这方面有更多的问题和建议,欢迎在评论区留言,我们将会积极回复,帮助您更好地了解nginx的限流功能。