可通过Nginx limit_req模块、宝塔防火墙插件或增强版ngx_http_limit_req_module三种方式限制单IP每秒访问频率,分别适用于手动配置、图形化操作及精细化路径/方法级限流场景。

如果您在宝塔面板中部署了网站,但发现某个IP地址频繁发起请求导致服务器负载升高或遭受简单CC攻击,则需要对单个IP的每秒访问频率进行限制。以下是实现该目标的具体方法:
一、通过Nginx配置限流模块(limit_req)
Nginx原生支持limit_req模块,可在宝塔面板中手动添加配置,基于IP维度设置每秒请求数上限。该方式无需安装额外插件,生效快且资源占用低。
1、登录宝塔面板,进入【网站】列表,点击对应站点右侧的【设置】按钮。
2、切换到【配置文件】选项卡,在server块内location / {}段落上方插入以下限流定义:
limit_req_zone $binary_remote_addr zone=perip:10m rate=5r/s;
3、在location / {}块内部添加启用指令:
limit_req zone=perip burst=10 nodelay;
4、点击【保存】,然后在【SSL】或【其他】标签页中点击【重载配置】使Nginx重新加载规则。
二、使用宝塔防火墙插件设置IP访问频率控制
宝塔官方防火墙插件提供图形化界面,可针对特定IP或IP段设定每秒请求数阈值,并自动封禁超频IP。适用于不熟悉Nginx语法的用户。
1、进入【软件商店】,搜索并安装【宝塔防火墙】(需专业版或企业版授权)。
2、安装完成后进入【宝塔防火墙】主界面,点击左侧菜单【CC防护】。
3、开启【CC攻击防护】开关,并将【单IP每秒请求数】设置为所需数值,例如6。
4、在【自定义规则】中点击【添加规则】,选择【按IP限速】,填写目标网站域名,设置【触发条件】为“单IP每秒请求超过”5次,动作选择【拒绝访问】。
5、保存后点击【重启防火墙】使策略立即生效。
三、通过Nginx第三方模块ngx_http_limit_req_module增强控制粒度
若需区分不同URL路径或HTTP方法进行差异化限流(如仅限制POST接口),可编译加载增强版limit_req模块,并配合map指令实现多条件匹配。
1、在SSH中执行命令检查当前Nginx是否已启用limit_req模块:nginx -V 2>&1 | grep -o with-http-limit-req-module。
2、若未启用,进入【软件管理】→【Nginx】→【编译安装】,勾选【limit_req模块】并重新编译。
3、编辑站点配置文件,在http块顶部添加:
map $request_method $limit_key { default $binary_remote_addr; POST "${binary_remote_addr}_post"; }
4、添加限流区域:
limit_req_zone $limit_key zone=postonly:10m rate=2r/s;
5、在对应location ~ \.php$ {}中加入:limit_req zone=postonly burst=4 nodelay;










