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掉,并且日志量会飞速增长,很容易将磁盘空间全部占用掉)

nginx结合iptables自动封禁IP nginx动态封禁ip_配置文件

2、查看nginx.conf加载配置文件的路径

可以看到nginx会加载vhosts目录里以 conf 结尾的文件。

nginx结合iptables自动封禁IP nginx动态封禁ip_配置文件_02


nginx结合iptables自动封禁IP nginx动态封禁ip_linux_03

3、屏蔽IP的方法:

那我们就在 vhosts 目录下面,建一个屏蔽IP的文件,命名为banned_ip.conf,以后新增加屏蔽IP只需编辑这个文件即可。
加入以下内容即可:

deny 140.237.225.236;

ps:请看文件示例:

nginx结合iptables自动封禁IP nginx动态封禁ip_IP_04


在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结合iptables自动封禁IP nginx动态封禁ip_IP_05


如果配置有问题就需要检查下哪儿有语法问题,如果没有问题,需要执行下面命令,重载 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,白名单的除外。