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服务。
订阅评论
登录
0 评论