如何不用插件,限制地区ip访问 New
最近出现很多蜘蛛,全是国外ip和台湾采集访问,求老站长指点下,不想用插件,插件安装太多了我知道答案 回答被采纳将会获得1 贡献 已有1人回答 宝塔后台的 这个可以 在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]