三二互联专业提供速度最快最稳定的美国服务器、香港服务器。中美直连,亚洲优化![ 代理登陆 ] [ 付款方式 ] [ 找回密码 ][ 电子协议责任书 ]
硬件资源保障

采用高配品牌服务器

主流强悍CPU配置

确保服务高速稳定运行

中美直连线路

中美直连亚洲优化

采用中国CN2骨干网络

保证速度飞快稳定高效

如何通过Web服务层限制恶意请求频率?

美国、香港服务器

如何通过Web服务层限制恶意请求频率?

01-27   来源:

 通过 Web 服务层限制恶意请求频率是精准防护 CC 攻击、适配业务特性的核心手段(仅针对 Web 服务生效,不影响服务器其他业务),主流 Web 服务为Nginx和Apache,二者均提供原生的请求频率 / 并发连接限制模块,可实现单 IP 请求速率、最大并发连接数、恶意请求特征拦截等精细化管控,以下是分服务的完整配置步骤(含宝塔面板可视化操作 + 原生命令行配置,均为可直接落地的实操方案)。

核心原则
Web 服务层限制的关键是 **「分层配置 + 适配业务阈值」**:
优先限制单 IP 每秒请求数(防高频刷接口 / 页面)和单 IP 最大并发连接数(防长连接占满资源);
结合恶意特征拦截(如异常 User-Agent、空 Referer),过滤攻击工具 / 爬虫的恶意请求;
阈值根据服务器配置和业务类型调整(静态站阈值可低,动态业务 / 高访问站适当提高,避免误封正常用户);
宝塔用户优先用可视化配置,原生 Linux 用户直接编辑配置文件,配置后均需重启 Web 服务生效。
一、Nginx 服务层限制(推荐,灵活度高、性能优,主流配置)
Nginx 通过 **limit_req(请求频率限制)和limit_conn(并发连接限制)** 模块实现核心管控,默认已编译这两个模块(宝塔 / 原生 Nginx 均支持),可全局配置(所有站点生效)或单站点配置(精准适配不同业务),同时支持拦截恶意请求特征。
场景 1:宝塔面板 + Nginx(可视化配置,最快最便捷)
宝塔已集成 Nginx 配置编辑功能,无需手动找配置文件,直接在站点配置中添加规则即可:
登录宝塔面板 → 【网站】→ 选择需要防护的站点 → 点击【配置文件】;
在打开的 Nginx 配置文件中,找到server{}代码段(站点核心配置);
直接粘贴以下限制规则(按需调整阈值)到server{}内(建议放在listen 80;/listen 443;下方):
nginx
# 单IP请求频率限制:每秒最多20次请求,突发40次(超出直接返回503,不排队)
limit_req_zone $binary_remote_addr zone=req_ip:10m rate=20r/s;
limit_req zone=req_ip burst=40 nodelay;
 
# 单IP最大并发连接数:最多30个同时连接(防长连接占资源)
limit_conn_zone $binary_remote_addr zone=conn_ip:10m;
limit_conn conn_ip 30;
 
# 服务器总并发连接数限制(根据服务器配置调整,1核2G建议1000以内)
limit_conn_zone $server_name zone=conn_server:10m;
limit_conn conn_server 1000;
 
# 拦截恶意User-Agent(攻击工具/爬虫/扫描器,按需添加特征)
if ($http_user_agent ~* "curl|wget|python|scrapy|sqlmap|nmap|bot|spider|attack") {
    return 403 Forbidden;
}
 
# 可选:拦截空Referer的恶意请求(静态资源站推荐开启,动态业务/接口谨慎开启)
# if ($http_referer = "") {
#     return 403 Forbidden;
# }
点击配置文件右上角【保存】→ 点击页面顶部【重启 Nginx】,规则立即生效。
场景 2:原生 Linux+Nginx(命令行配置,全局 / 单站点可选)
方式 1:单站点配置(推荐,仅针对指定域名生效,不影响其他站点)
编辑目标站点的 Nginx 配置文件(路径根据实际部署调整,示例为通用路径):
bash
运行
# 通用单站点配置路径
vim /etc/nginx/conf.d/your_domain.conf
# 若为源码编译Nginx,路径可能为:/usr/local/nginx/conf/vhost/your_domain.conf
在server{}段内添加上述宝塔面板同款限制规则,保存退出(:wq);
验证配置语法(避免重启失败)→ 重启 Nginx:
bash
运行
# 验证配置正确性
nginx -t
# 重启Nginx生效
systemctl restart nginx
方式 2:全局配置(所有 Nginx 站点生效,适合统一防护)
编辑 Nginx 主配置文件:
bash
运行
vim /etc/nginx/nginx.conf
# 宝塔面板Nginx主配置路径:/www/server/nginx/conf/nginx.conf
在http{}段内添加请求 / 连接限制的内存区域定义(仅定义,不生效):
nginx
http {
    # 全局定义:所有站点可直接引用这些区域
    limit_req_zone $binary_remote_addr zone=req_ip:10m rate=20r/s;
    limit_conn_zone $binary_remote_addr zone=conn_ip:10m;
    limit_conn_zone $server_name zone=conn_server:10m;
    
    # 其他原有配置(如include、log_format等)...
}
编辑单个站点配置文件,在server{}段内仅添加应用规则(无需重复定义内存区域):
nginx
server {
    listen 80;
    server_name your_domain.com;
    root /usr/share/nginx/html;
    
    # 直接应用全局定义的规则
    limit_req zone=req_ip burst=40 nodelay;
    limit_conn conn_ip 30;
    limit_conn conn_server 1000;
    
    # 恶意特征拦截
    if ($http_user_agent ~* "curl|wget|python") {
        return 403;
    }
}
验证配置→重启 Nginx 生效(同单站点配置步骤)。
Nginx 关键参数解读(按需调整)
参数 含义 1 核 2G 服务器推荐值
rate=20r/s 单 IP 每秒最大请求数(r/s=requests/second) 10-20r/s
burst=40 突发请求阈值(瞬间峰值请求,超出部分 nodelay 直接拒绝,否则排队) 20-40
nodelay 关闭请求排队,超出 rate+burst 直接返回 503(防攻击请求占满排队队列) 必加
limit_conn conn_ip 30 单 IP 最大并发连接数 20-30
limit_conn conn_server 1000 服务器总并发连接数 500-1000
zone=req_ip:10m 内存区域(10m 可存储约 16 万 IP 的请求状态,足够大部分业务使用) 10m-20m
二、Apache 服务层限制(针对 Apache 搭建的 Web 服务)
Apache 通过 **mod_limitipconn(连接数限制)和mod_reqtimeout(请求超时限制)** 模块实现管控,部分系统默认未开启模块,需先手动开启,再添加限制规则。
场景 1:宝塔面板 + Apache(可视化配置)
登录宝塔面板 → 【软件商店】→ 找到Apache → 点击【设置】→ 【模块管理】;
找到并开启 **limitipconn和reqtimeout** 模块(无则直接安装),点击【保存】;
回到【网站】→ 选择目标站点 → 【配置文件】→ 找到/段;
在段内添加以下限制规则,保存后【重启 Apache】:
apache
# 单IP最大并发连接数
MaxConnPerIP 50
# 放行白名单IP(本地IP/运维IP,多个用空格分隔)
NoIPLimit 127.0.0.1 192.168.1.100
# 请求超时限制:10秒无请求响应则断开(防长连接挂起)
RequestReadTimeout header=10 body=10
# 单个请求最大字节数(防大请求包攻击,可选)
LimitRequestBody 10485760
场景 2:原生 Linux+Apache(命令行配置)
步骤 1:开启核心防护模块
bash
运行
# CentOS/RHEL 系统
vim /etc/httpd/conf/httpd.conf
# Ubuntu/Debian 系统
vim /etc/apache2/apache2.conf
# 宝塔Apache配置路径
vim /www/server/apache/conf/httpd.conf
找到以下模块行,删除开头的#开启模块(无则手动添加):
apache
LoadModule limitipconn_module modules/mod_limitipconn.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule rewrite_module modules/mod_rewrite.so  # 可选,用于URL重写拦截恶意请求
步骤 2:添加限制规则
若需全局生效(所有 Apache 站点):直接在配置文件末尾添加上述宝塔同款 Apache 规则;
若需单站点生效:编辑站点配置文件(/etc/httpd/conf.d/your_domain.conf或/etc/apache2/sites-available/your_domain.conf),在段内添加规则。
步骤 3:验证并重启 Apache
bash
运行
# 验证配置语法
apachectl -t
# 重启Apache生效
systemctl restart httpd  # CentOS/RHEL
systemctl restart apache2  # Ubuntu/Debian
bt restart apache  # 宝塔面板
Apache 关键参数解读
参数 含义 推荐值
MaxConnPerIP 50 单 IP 最大并发连接数(核心限制,防长连接占资源) 30-50
NoIPLimit 放行白名单 IP,避免运维 / 本地请求被拦截 按需加
RequestReadTimeout 限制请求头 / 体的超时时间,防止恶意请求挂起占用连接 10 秒
LimitRequestBody 限制单个请求的最大字节数,拦截超大请求包攻击(10485760=10M) 5M-20M
三、Web 服务层限制的进阶优化(提升防护效果,避免误封)
1. 动态业务 / 接口服务:跳过静态资源限制
静态资源(js/css/img/ico)的高频请求多为正常浏览器缓存,可跳过限制,仅限制动态请求(php/jsp/asp/ 接口路径):
Nginx 实现(添加到server{}段)
nginx
# 仅对.php文件(动态请求)限制频率,静态资源跳过
location ~ \.php$ {
    limit_req zone=req_ip burst=40 nodelay;
    limit_conn conn_ip 30;
    # 原有PHP解析配置...
}
# 静态资源直接放行,不限制
location ~* \.(js|css|png|jpg|ico|gif)$ {
    expires 7d;  # 开启浏览器缓存,减少请求量
    add_header Cache-Control "public, max-age=604800";
    try_files $uri =404;
}
2. 拦截更多恶意请求特征(补充防护)
除了 User-Agent,还可拦截异常请求方法、高频访问的恶意路径,添加到 Nginx 的server{}或 Apache 的段:
Nginx 额外拦截规则
nginx
# 禁止非GET/POST/HEAD的请求方法(如PUT/DELETE/OPTIONS,业务无需则拦截)
if ($request_method !~ ^(GET|POST|HEAD)$) {
    return 403;
}
# 拦截访问恶意路径(如后台扫描、脚本注入路径)
if ($request_uri ~* "/admin/login|/sqlmap|/phpmyadmin|/shell") {
    return 403;
}
Apache 额外拦截规则(需开启 rewrite 模块)
apache
RewriteEngine On
# 禁止非GET/POST/HEAD请求
RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$ [NC]
RewriteRule ^ - [R=403,L]
# 拦截恶意路径
RewriteCond %{REQUEST_URI} /admin/login|/sqlmap [NC]
RewriteRule ^ - [R=403,L]
3. 合理设置返回码,避免攻击工具识别
将拦截后的返回码从403改为503 Service Unavailable,让攻击工具误认为服务器故障,减少持续攻击:
nginx
# Nginx:替换return 403 为
return 503;
# 可选:配置503自定义页面,提升用户体验
error_page 503 /503.html;
location = /503.html {
    root /usr/share/nginx/html;  # 页面存放路径
    expires -1;
}
四、配置生效验证(确认恶意请求被有效拦截)
配置重启后,通过查看 Web 服务访问日志,验证限制规则是否生效,拦截的请求会返回403/503状态码:
Nginx 日志查看
bash
运行
# 宝塔Nginx日志路径
cat /www/wwwlogs/your_domain.log | grep -E "403|503" | head -20
# 原生Nginx日志路径
cat /var/log/nginx/access.log | grep -E "403|503" | head -20
Apache 日志查看
bash
运行
# 宝塔Apache日志路径
cat /www/wwwlogs/your_domain.log | grep -E "403|503" | head -20
# 原生Apache日志路径
cat /var/log/httpd/access_log | grep -E "403|503" | head -20
输出解读:若能看到大量含403/503的日志,且来源为单个 / 少数 IP,说明规则已生效,成功拦截恶意请求。
五、关键注意事项
阈值切勿过小:建议先设置较高阈值(如 Nginxrate=30r/s),运行 1-2 天后查看日志,根据正常用户的请求频率逐步下调,避免误封;
模块必开启:Apache 需确认mod_limitipconn和mod_reqtimeout模块已开启,否则规则无效;Nginx 需确保limit_req和limit_conn模块已编译(可通过nginx -V查看);
动态业务谨慎拦截空 Referer:接口服务、APP 后端、商城等动态业务,大量正常请求可能无 Referer,开启后会导致误封;
配合系统层兜底:Web 服务层限制为主防护,建议搭配iptables系统层限制(限制 80/443 端口的连接数),形成双层防护,即使 Web 服务宕机,也能拦截部分恶意流量;
云服务器搭配 WAF:本地 Web 服务限制为辅,云服务器建议在控制台开启Web 应用防火墙(WAF),云 WAF 可拦截 SQL 注入、XSS+CC 混合攻击,且支持更高的防护阈值。
六、不同业务场景的阈值推荐(通用参考)
服务器配置 业务类型 Nginx(rate/burst/conn_ip) Apache(MaxConnPerIP)
1 核 2G 个人博客 / 静态站 10r/s / 20 / 20 20-30
2 核 4G 中小企业官网 / 小商城 20r/s / 40 / 30 30-50
4 核 8G+ 电商 / 高访问站 / 接口服务 50r/s / 100 / 50 50-100

三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快

上一篇:如何在Nginx中配置limit_req和limit_conn模块? 下一篇:如何通过命令行配置宝塔面板的IP白名单?

美国GIA服务器三二互联版权所有 WWW.250.cc 2008-2015 All Rights Reserved
三二互联 - 专业的美国C3服务器香港vps、抗DOOS流量清洗、云备份系统、网站加速系统、美国GIA服务器和香港云服务器产品提供商
三二互联24小时在线工单系统为您提供全面、专业、周到的技术支持与服务
咨询热线:400-679-9994(免长话费)