Nginx使用GeoIP模块限制IP访问

2022-10-27 15:43:04 浏览数 (1)

安装geoip模块

代码语言:javascript复制
./configure 
--prefix=/usr/local/nginx 
--pid-path=/var/run/nginx.pid 
--user=nginx 
--group=nginx 
--with-stream 
--with-threads 
--with-file-aio 
--with-http_v2_module 
--with-http_mp4_module 
--with-http_sub_module  
--with-http_ssl_module 
--with-http_geoip_module

下载IP数据库

代码语言:javascript复制
# 官网地址:https://www.miyuru.lk/geoiplegacy

# 下载国家数据库
wget https://dl.miyuru.lk/geoip/maxmind/country/maxmind.dat.gz
gzip -d maxmind.dat.gz
mv maxmind.dat /usr/local/nginx/geoip/GeoCountry.dat

# 下载城市数据库
wget https://dl.miyuru.lk/geoip/maxmind/city/maxmind.dat.gz
gzip -d maxmind.dat.gz
mv maxmind.dat /usr/local/nginx/geoip/GeoCity.dat

修改nginx配置

代码语言:javascript复制
# 添加IP数据库
http {
    ...
    geoip_country /usr/local/nginx/geoip/GeoCountry.dat;
    geoip_city /usr/local/nginx/geoip/GeoCity.dat;
    ...
}

# 屏蔽国家
server {
    ...
    location / {
        ...
        if ($geoip_country_code != CN) {	# 禁止非中国IP访问
            return 403;
        }
        ...
    }
    ...
}

# 屏蔽城市
server {
    ...
    location / {
        ...
        if ($geoip_city = Beijing) {
            return 403;
        }
        ...
    }
    ...
}

# 屏蔽省份
# 屏蔽省份不能使用说明中的Henan、Liaoning等字眼,需要使用ISO3166规定的代码,代码参见https://www.maxmind.com/download/geoip/misc/region_codes.csv
server {
    ...
    location / {
        ...
        if ($geoip_region = 22) {
            return 403;
        }
        ...
    }
    ...
}

GeoIP相关参数

代码语言:javascript复制
# 国家参数
$geoip_country_code #两位字符的英文国家码。如:CN, US
$geoip_country_code3 #三位字符的英文国家码。如:CHN, USA
$geoip_country_name #国家英文全称。如:China, United States

# 城市参数
$geoip_city_country_code #也是两位字符的英文国家码。
$geoip_city_country_code3 #上同
$geoip_city_country_name #上同.
$geoip_region #这个经测试是两位数的数字,如杭州是02, 上海是 23
$geoip_city #城市的英文名称。如:Hangzhou
$geoip_postal_code #城市的邮政编码。国内该字段为空
$geoip_latitude #纬度
$geoip_longitude #经度

# 省份参数
CN,01,”Anhui”
CN,02,”Zhejiang”
CN,03,”Jiangxi”
CN,04,”Jiangsu”
CN,05,”Jilin”
CN,06,”Qinghai”
CN,07,”Fujian”
CN,08,”Heilongjiang”
CN,09,”Henan”
CN,10,”Hebei”
CN,11,”Hunan”
CN,12,”Hubei”
CN,13,”Xinjiang”
CN,14,”Xizang”
CN,15,”Gansu”
CN,16,”Guangxi”
CN,18,”Guizhou”
CN,19,”Liaoning”
CN,20,”Nei Mongol”
CN,21,”Ningxia”
CN,22,”Beijing”
CN,23,”Shanghai”
CN,24,”Shanxi”
CN,25,”Shandong”
CN,26,”Shaanxi”
CN,28,”Tianjin”
CN,29,”Yunnan”
CN,30,”Guangdong”
CN,31,”Hainan”
CN,32,”Sichuan”
CN,33,”Chongqing”

0 人点赞