Nginx屏蔽国内外IP访问
2023-03-12

有时候我们的网站可能会需要屏蔽一些地区的IP,禁止他们访问。例如一些外贸网站需要屏蔽国内IP,国内的屏蔽外国IP。

这里介绍一种最简单快速的,不需要重新编译nginx。

首先介绍一下nginx提供的屏蔽IP的命令

# deny 用屏蔽、allow 允许 
# 屏蔽单个IP
deny IP;
# 屏蔽所有IP
deny all;
# 允许单个IP访问
allow IP;
# 允许全部
allow all;

# IP可以时单个IP也可以是IP段
deny 123.0.0.0/8

第一步

知道了nginx怎么屏蔽IP,我们只需要拿到国内所有的ip地址段就可以了,我们剋从 https://www.ip2location.com/free/visitor-blocker 中获取

image-1655097132894

左边选择城市,右边选择类型,根据需要选择即可。

解压之后是一个txt 文件

image-1655097256565

放到配置文件中

删除location / {} ( 可选 ,主要方便放到不同位置) 将后缀名改为.conf 上传到服务器上。

打开nginx 配置文件,不知道在哪可以输入 sudo nginx -t 看一下配置文件在哪。

然后将刚才文件 include 到nginx配置文件中即可

server
    {
        listen 80 ;
        include /usr/local/nginx/conf/nginx.conf/firewall.conf;
        ......

注意 include 的位置,可以是 http, server, location, limit_except (如果文件里没有删除 location 就不能乱放了)

重新加载

保存,重新加载即可

sudo nginx -s reload