Nginx是一款常用的高性能Web服务器和反向代理服务器,其优秀的性能和可扩展性使得它广泛应用于各种网络应用和场景中。在实际使用过程中,为了保障系统的稳定性和安全性,需要对Nginx进行一定的配置和优化。其中,限制每秒请求次数、限制每秒连接次数和下载速度限制等技术是非常重要的配置项之一,可以防止一定程度的CC攻击。

要实现这个功能,这里主要用到limit_req模块和limit_conn模块。limit_req模块是一个Nginx的限制请求速率模块,可以用于控制客户端的请求速率。limit_conn模块是一个Nginx的限制连接速率模块,可以用于控制客户端的连接速率。
配置类似如下:
# 在10MB的内存中,为每个IP地址限制1次请求/秒
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location / {
limit_req zone=one burst=5 nodelay;
}
}
}
# 在10MB的内存中,为每个IP地址限制5次连接
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location / {
limit_conn addr 5;
}
}
}
这样设置现在有个问题,如果使用了cdn或者反向代理,那么就必须使用白名单来排除这些IP,不然正常访问都会收到影响。
您可以将其与地图和地理模块结合使用,创建不应用限制的 IP 白名单。当 limit_req_zone (和 limit_conn_zone)中的键为空时,不应用限制,最好避免使用“if”指令。
以下是我改进后的配置,实测有效
http {
geo $whitelist {
default 0;
# CIDR in the list below are not limited
1.2.3.0/24 1;
127.0.0.1/32 1;
8.8.8.8/32 1;
}
map $whitelist $limit {
0 $binary_remote_addr;
1 "";
}
limit_conn_zone $limit zone=addr:10m;
limit_req_zone $limit zone=one:10m rate=1r/s;
server {
location / {
limit_conn addr 5;
limit_req zone=one burst=5 nodelay;
}
}
}
配置完成,最后记得重启nginx服务。
相关文件下载方式: 微信关注以下公众号回复数字 943677 获取。
正文完
微信搜一搜“奇悦电脑科技”或扫描二维码关注我们


