虚拟主机怎么限制同ip访问次数?

在虚拟主机环境中,限制同一 IP 地址的访问次数(防刷、防爬、防攻击)是常见的安全需求。以下是几种常见的方法,适用于不同类型的虚拟主机环境:


🧩 一、使用 .htaccess 文件(适用于 Apache 虚拟主机)

如果你使用的是 Apache 服务器,并且支持 .htaccess 文件配置,可以使用 mod_limitipconnmod_evasive 模块来限制同一 IP 的并发连接或访问频率。

示例:使用 mod_evasive 防御频繁访问

  1. 确认服务器已安装 mod_evasive 模块

    如果你有服务器权限,可以通过 SSH 登录并检查是否安装该模块:

    apachectl -M | grep evasive
  2. 配置 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: 封禁时长(秒)。
  3. 创建日志目录并设置权限

    mkdir /var/log/mod_evasive
    chown www-data:www-data /var/log/mod_evasive
  4. 重启 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技术博 » 虚拟主机怎么限制同ip访问次数?