在虚拟主机环境中,限制同一 IP 地址的访问次数(防刷、防爬、防攻击)是常见的安全需求。以下是几种常见的方法,适用于不同类型的虚拟主机环境:
🧩 一、使用 .htaccess 文件(适用于 Apache 虚拟主机)
如果你使用的是 Apache 服务器,并且支持 .htaccess 文件配置,可以使用 mod_limitipconn 或 mod_evasive 模块来限制同一 IP 的并发连接或访问频率。
示例:使用 mod_evasive 防御频繁访问
-
确认服务器已安装 mod_evasive 模块
如果你有服务器权限,可以通过 SSH 登录并检查是否安装该模块:
apachectl -M | grep evasive -
配置 mod_evasive
编辑配置文件(如
/etc/apache2/mods-enabled/evasive.conf),添加如下内容:<IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 DOSLogDir "/var/log/mod_evasive" DOSEmailNotify your@email.com </IfModule>DOSPageCount: 同一 IP 每秒访问相同页面超过多少次会被封禁。DOSSiteCount: 同一 IP 每秒访问整个站点超过多少次会被封禁。DOSBlockingPeriod: 封禁时长(秒)。
-
创建日志目录并设置权限
mkdir /var/log/mod_evasive chown www-data:www-data /var/log/mod_evasive -
重启 Apache
systemctl restart apache2
🛠️ 二、使用 PHP 脚本控制访问频率(通用方案)
如果无法修改服务器配置,可以在网站入口脚本中加入限制逻辑,比如用 PHP 记录 IP 请求次数。
示例代码(PHP + Redis/Session)
<?php
session_start();
$ip = $_SERVER['REMOTE_ADDR'];
$key = "rate_limit_{$ip}";
// 使用 Redis 更高效(这里用 session 演示)
if (!isset($_SESSION[$key])) {
$_SESSION[$key] = 1;
} else {
$_SESSION[$key]++;
}
if ($_SESSION[$key] > 10) { // 每秒最多请求10次
header('HTTP/1.1 429 Too Many Requests');
echo '访问太频繁,请稍后再试。';
exit();
}
// 每秒重置计数器
if (time() % 1 === 0) {
$_SESSION[$key] = 0;
}
⚠️ 注意:这种方案依赖于 session,可能不够精确,适合轻量级场景。
🔐 三、使用防火墙工具(如 iptables)
如果你有服务器 root 权限,可以使用 iptables 直接限制单个 IP 的访问频率。
示例:每秒最多允许 60 次请求
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 60 -j DROP
- 上面规则表示:每个 IP 在 60 秒内最多建立 60 个新连接,否则丢弃。
☁️ 四、使用 CDN 或 WAF 服务(推荐)
对于虚拟主机用户来说,最简单有效的方式是通过第三方服务进行防护,例如:
| 服务名称 | 功能 |
|---|---|
| Cloudflare | 提供 IP 限速、WAF、DDoS 防护 |
| 腾讯云 WAF | 支持访问控制、IP 黑白名单 |
| 阿里云 DDoS 防护 | 可设置 CC 攻击防护策略 |
这些平台通常提供图形界面,可直接设置“每秒请求上限”、“IP 黑名单”等。
✅ 总结:推荐方式
| 方式 | 是否需要服务器权限 | 适用场景 |
|---|---|---|
.htaccess + mod_evasive |
是 | Apache 环境,有服务器管理权限 |
| PHP 脚本限制 | 否 | 虚拟主机,只能上传网页文件 |
| iptables | 是 | VPS 或独立服务器用户 |
| CDN/WAF | 否 | 所有用户,尤其是虚拟主机用户 |
如果你能提供具体的服务器类型(Apache/Nginx)、是否有 FTP/SSH 权限等信息,我可以给出更精准的配置建议。
CLOUD技术博