Nginx IP黑白名单的作用非常大,比如服务器被频繁的攻击,或者购买/接入API
的合作伙伴,那么此时就需要实现类似于IP
白名单的功能。还可以防止一些机器爬虫程序,被识别后禁止其再次访问网站,因此也需要实现IP
黑名单,实现这个功能只需要配置Nginx即可
Nginx
做黑白名单机制,主要是通过allow、deny
配置项来实现这2个指令都宋属于ngx_http_access_module,nginx默认加载此模块
allow xxx.xxx.xxx.xxx; # 允许指定的IP访问,可以用于实现白名单。
deny xxx.xxx.xxx.xxx; # 禁止指定的IP访问,可以用于实现黑名单。
要同时屏蔽/开放多个IP
访问时,如果所有IP
全部写在nginx.conf
文件中定然是不显示的,这种方式比较冗余,可以新建2个外部配置文件,然后再通过include
的方式将BlocksIP.conf、WhiteIP.conf
引入到nginx.conf
配置中:
# --------创建黑名单:BlocksIP.conf---------
deny 192.177.12.222; # 屏蔽192.177.12.222访问
deny 192.177.44.201; # 屏蔽192.177.44.201访问
deny 127.0.0.0/8; # 屏蔽127.0.0.1到127.255.255.254网段中的所有IP访问
# --------创建白名单:WhiteIP.conf---------
allow 192.177.12.222; # 允许192.177.12.222访问
allow 192.177.44.201; # 允许192.177.44.201访问
allow 127.45.0.0/16; # 允许127.45.0.1到127.45.255.254网段中的所有IP访问
deny all; # 除开上述IP外,其他IP全部禁止访问
复制代码
分别将要禁止/开放的IP
添加到对应的文件后,可以再将这两个文件在nginx.conf
中导入:
http{
# 屏蔽该文件中的所有IP
include /soft/nginx/IP/BlocksIP.conf;
server{
location xxx {
# 某一系列接口只开放给白名单中的IP
include /soft/nginx/IP/blockip.conf;
}
}
}
对于文件具体在哪儿导入,这个也并非随意的,如果要整站屏蔽/开放就在http
中导入,如果只需要一个域名下屏蔽/开放就在sever
中导入,如果只需要针对于某一系列接口屏蔽/开放IP
,那么就在location
中导入。
当然,上述只是最简单的IP
黑/白名单实现方式,同时也可以通过ngx_http_geo_module、ngx_http_geo_module
第三方库去实现(这种方式可以按地区、国家进行屏蔽,并且提供了IP
库)。