龙空技术网

【原创文章】WordPress屏蔽禁止某个城市ip防止爬虫导致内存占满

玩技e族 181

前言:

当前咱们对“多城市php”大概比较关切,朋友们都需要剖析一些“多城市php”的相关资讯。那么小编同时在网摘上收集了一些有关“多城市php””的相关文章,希望朋友们能喜欢,咱们一起来学习一下吧!

使用场景:

最近网站被河南郑州大批量爬虫,导致cpu和内存100%网站负载100%,分析了网站访问日志,发现大量的爬虫采集程序访问网站,手段是通过采集插件或者爬虫软件对网站文章和路径大批量访问get请求。

适用场景:

单一城市代理ip地址重复get网站,可以针对某个城市的请求进行禁止,可以封锁一段时间后观察网站日志,选择合适的时间放开即可。

(爬虫使用代理爬取网站文章和热词内容)

百度相关:(查询的大部分结果类似)

通过百度找到了大量的相关于该类的禁止方式和方法此方式已不再适用,相关代码展示如下:

<?php/** * * test.php(屏蔽国家IP) * */$verification = '美国';//需要屏蔽国家的IPfunction get_client_ip() {                $ip = $_SERVER['REMOTE_ADDR'];              if (isset($_SERVER['HTTP_X_REAL_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_FORWARDED_FOR'])) {                     $ip = $_SERVER['HTTP_X_REAL_FORWARDED_FOR'];                }                   elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) {                      $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];                }                   elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {                    $ip = $_SERVER['HTTP_CLIENT_IP'];                }                   return $ip;             }$ip = get_client_ip();//获取访客IP$antecedents = $_SERVER['HTTP_REFERER'];//访客来路地址$result = file_get_contents(";.$ip);//IP数据库来自淘宝。$address = json_decode($result,true);//判断访客是否属于美国,是否来自百度,是否来自谷歌if($address['data']['country'] == $verification && strpos($antecedents, 'baidu') === false && strpos($antecedents, 'google') === false){        sleep(10);//设置一个10秒等待。        header('HTTP/1.1 503 Service Temporarily Unavailable');        header('Status: 503 Service Temporarily Unavailable');        header('Retry-After: 3600000');        exit;}?>

原因是因为淘宝提供的api已经停止了。

(源接口请求访问已无法正常打开)

(淘宝官方通知下线通告)

百度地图:

思路:因为百度提供了相关的地址查询服务,不过需要自己注册和认证下。认证过后需要自己创建和申请创建应用:点我前往>>>

TIPS: 1、只有IP白名单内的服务器才能成功发起调用格式: 202.198.16.3,202.198.0.0/16 填写IP地址或IP前缀网段,英文半角逗号分隔如果不想对IP做任何限制,请设置为0.0.0.0/0 (谨慎使用,AK如果泄露配额会被其用户消费,上线前可以用作Debug,线上正式ak请设置合理的IP白名单) 2、因新系统升级,自公告之日起,“服务端AK”不再支持浏览器端使用;在浏览器端使用,请选择“浏览器端AK”,例如JavaScript API只支持浏览器类型AK。 对于以前申请的服务端AK,不变更即不受影响,仍支持浏览器端使用;如更新老的服务端AK,再次保存,则按新创建AK处理,不再支持浏览器端使用。

使用方法:

可以将上面的代码请求地址改为:应用ak&ip={$ip} 需要将申请创建下来的应用ak填写在上面。

本站方式:

将下述代码放在主题的function.php下即可使用:(百度地图api方式)

标签: #多城市php