1、先查找服务器所有访问者的ip:
awk '{print $1}' /data/logs/nginx/tg-ga-access.log |sort |uniq -c |sort -n
tg-ga-access.log 为域名的访问日志文件所在路径
会到如下结果,前面是ip的访问次数,后面是ip,很明显我们需要把访问次数多的ip且异常的IP进行封禁 如下结果 (ps: 以下结果是正常的并不是异常的,当做一个例子看就行,异常的访问量很大的,有个几万和几十万不等,访问量大的话程序很容易down掉,并且日志量会飞速增长,很容易将磁盘空间全部占用掉)
2、查看nginx.conf加载配置文件的路径
可以看到nginx会加载vhosts目录里以 conf 结尾的文件。
3、屏蔽IP的方法:
那我们就在 vhosts 目录下面,建一个屏蔽IP的文件,命名为banned_ip.conf,以后新增加屏蔽IP只需编辑这个文件即可。
加入以下内容即可:
deny 140.237.225.236;
ps:请看文件示例:
在nginx的配置文件nginx.conf中加入如下配置,可以放到http, server, location, limit_except语句块,需要注意相对路径,本例当中nginx.conf,banned_ip.conf未在同一个目录中
include vhosts/*.conf;
保存nginx.conf文件,然后测试现在的nginx配置文件是否是合法的:
/usr/local/nginx/sbin/nginx -t
如果配置没有问题,就会输出:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
如果配置有问题就需要检查下哪儿有语法问题,如果没有问题,需要执行下面命令,重载 nginx 配置文件:
/usr/local/nginx/sbin/nginx -s reload #不需要重启nginx
4、补充说明:
单个网站屏蔽IP的方法,把include banned_ip.conf; 放到网址对应的server{}模块
所有网站屏蔽IP的方法,把include banned_ip.conf; 放到http {}模块#在nginx.conf文件里这样写也可以,也会加载banned_ip.conf屏蔽IP的文件
include vhosts/*.conf;
#屏蔽单个IP
deny IP;#屏蔽所有ip访问
deny all;#屏蔽IP段
deny 42.0.0.0/8;
deny 42.0.0.0/16;
deny 42.0.0.0/24;#允许单个ip访问
allow IP; #允许所有ip访问
allow all; #也可以除了几个IP外,其他全部拒绝,
banned_ip.conf里可以这样写#有几个允许访问的IP就写几行allow IP; #允许访问的IP
allow IP; #允许访问的IP
deny all; #拒绝所有的IP,白名单的除外。