在配置nginx的过程中我们需要考虑受到攻击或恶意请求的情况,比如单用户恶意发起大量请求,这时Nginx的请求限制可以帮助我们对其进行限制。
连接频率限制 : limit_conn_module
请求频率限制 : limit_req_module
limit_req_module 的配置使用
http{
...
#定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,
#以$binary_remote_addr 为key,限制平均每秒的请求为20个,
#1M能存储16000个状态,rete的值必须为整数,
#如果限制两秒钟一个请求,可以设置成30r/m
limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;//配置1处
...
server{
...
location {
...
#限制每ip每秒不超过20个请求,漏桶数burst为5
#brust的意思就是当每秒超过20个请求时,5个以内的请求会被延迟访问,超过5个的直接返回503
#nodelay,设置该选项,将严格使用平均速率限制请求数,超过请求频率的直接返回503
limit_req zone=allips burst=5 nodelay;// 配置2处
...
}
...
}
...
}#注意配置的作用域
limit_conn_module配置使用
http{
...
#定义一个名为all_zone的limit_zone,大小10M内存来存储session,
#nginx 1.18以后用limit_conn_zone替换了limit_conn
limit_conn_zone all_zone $binary_remote_addr 10m;
...
server{
...
location {
...
limit_conn all_zone 20; #连接数限制
#带宽限制,对单个连接限数,限制带宽上限500k
limit_rate 500k;
...
}
...
}
...
}