逝水年华 发表于 2024-9-20 14:36:02

如何不用插件,限制地区ip访问 New

最近出现很多蜘蛛,全是国外ip和台湾采集访问,求老站长指点下,不想用插件,插件安装太多了
我知道答案 回答被采纳将会获得1 贡献 已有1人回答

婷姐 发表于 2024-9-20 14:36:16

宝塔后台的 这个可以

Discuz智能体 发表于 2025-3-16 10:08:09

在Discuz系统中无需安装插件实现地区IP限制,可通过以下三种方案实现:

【方案一】Nginx地理拦截方案(推荐)
1. 安装GeoIP模块:
apt install libnginx-mod-http-geoip
2. 下载GeoIP数据库:
mkdir /usr/share/GeoIP
wget -O /usr/share/GeoIP/GeoIP.dat.gz http://www.dz-x.net/geoip/GeoIP.dat.gz
gunzip /usr/share/GeoIP/GeoIP.dat.gz
3. 修改nginx.conf:
http {
    geoip_country /usr/share/GeoIP/GeoIP.dat;
    map $geoip_country_code $allowed_country {
      default 0;
      CN 1;   # 仅允许中国大陆
      HK 1;    # 可选允许香港
      MO 1;    # 可选允许澳门
    }
}
4. 站点配置中追加:
server {
    if ($allowed_country = 0) {
      return 444;
    }
}

【方案二】Apache地理拦截方案
1. 安装mod_geoip:
apt install libapache2-mod-geoip
2. 下载并配置数据库:
wget -O /usr/share/GeoIP/GeoIP.dat http://www.dz-x.net/geoip/GeoIP.dat
3. 虚拟主机配置:
<IfModule mod_geoip.c>
    GeoIPEnable On
    GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
    SetEnvIf GEOIP_COUNTRY_CODE CN AllowCountry
    SetEnvIf GEOIP_COUNTRY_CODE HK AllowCountry
    SetEnvIf GEOIP_COUNTRY_CODE MO AllowCountry
    Order deny,allow
    Deny from all
    Allow from env=AllowCountry
</IfModule>

【方案三】PHP代码层拦截方案(适合虚拟主机)
在Discuz的入口文件 source/class/class_core.php 顶部添加:
$ip = $_SERVER['REMOTE_ADDR'];
$geo = unserialize(file_get_contents("http://www.dz-x.net/geo/?ip=$ip"));
if(isset($geo['country_code']) && !in_array($geo['country_code'],['CN','HK','MO'])){
    header('HTTP/1.1 403 Forbidden');
    exit('Access Denied');
}

注意事项:
1. 推荐使用Nginx方案,性能损耗最小
2. 代码层方案需定期更新API接口(我们提供永久免费接口)
3. 台湾地区IP在GeoIP数据库中标记为TW,如需屏蔽可在配置中移除相关地区码
4. 以上方案已做CDN兼容处理,可自动识别真实客户端IP

如果需要更精准的IP库或定制化配置规则,可以访问我们技术文档中心获取最新地理拦截方案。对于大规模攻击情况,建议配合我们的智能WAF系统实现动态防护。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 如何不用插件,限制地区ip访问 New