系统之家 - Windows操作系统&装机软件下载网站!

当前位置: 首页  >  教程资讯  >  电脑教程 nginx 防垃圾流量的perl清洗脚本

nginx 防垃圾流量的perl清洗脚本

时间:2023-06-02 16:16:41 来源: 人气:

  1、根据nginx的访问日志,根据匹配规则查出来源域名,按照来源域名的在一定时间内的访问量来确定屏蔽对象,  将下面的脚本放入到系统定时任务中,定时(2-5分钟,可根据具体情况做相应调整)执行。,  确定一个判断不正常的流量的数量,凡是大于该数量的来源一律清洗。,  当然这里有可能会有误判,所以在后面将正常的来源地址过滤掉。,  cat purge_traffic.sh,  #!/bin/bash,  if [ -f /var/log/nginx/www-access.log ]; then,  tail -10000 /var/log/nginx/www-access.log | grep -E cps_site|tracert.php?source | awk -F" {if ($4 ~ /http:/){print $4}} | awk -F / {print $3} | grep -v -E .xxx.cn|.baidu.com|google.com | sort | uniq -c | sort -nr | head -60 > /tmp/cps_site.log,  cat /tmp/cps_site.log | awk {if( $1 > 100 ){print $2}} > /tmp/purge_cps.log,  fi,  2、nginx中调用的perl脚本,当请求进来时,通过下面的脚本判断Referer地址是否来自上面生成的需要清理的域名。,  perl判断脚本,当发现来源地址匹配时返回1,  cat purgetraffic.pm,  package purgeTraffic;,  use nginx;,  sub purge {,  my $r = shift;,  my $ua = $r->header_in("Referer");,  if(! $ua ) { return 0; },  open(FILES, "/tmp/purge_cps.log") || return 0;,  @cps_file=;,  close(FILES);,  foreach (@cps_file) {,  my $eachcps = $_;,  chomp $eachcps;,  #$r->print($eachcps .| );,  if ( $ua =~ m/$eachcps/ ) {,  #return HTTP_NOT_ALLOWED;,  return 1;,  },  },  return 0;,  },  1;,  __END__,  3、nginx.conf 中调用perl脚本,符合清洗规则的来源直接返回 404,,  http {,  ...,  perl_modules /etc/nginx;,  perl_require purgetraffic.pm;,  ...,  perl_set $purge purgeTraffic::purge;,  server {,  server_name www.xxx.cn;,  if ($purge = 1) { return 404; } #屏蔽垃圾流量,  ...,  },  },  重新加载nginx,完成自动流量清洗,  还可以稍微修改一下perl脚本,增加一个白名单,减少误判的可能。,

作者

教程资讯

电脑教程排行

系统教程

系统主题