설치준비

컴파일을 위해 먼저 아래 라이브러리를 설치합니다.
[설치환경 : Ubuntu 18.04, Nginx 1.16.1] ,
2020년12월 Ubuntu 20.04 & nginx 1.18.0 작동확인

apt-get install build-essential 
apt-get install libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev

MaxMind 저장소 추가 및 설치

add-apt-repository ppa:maxmind/ppa
apt update
apt install geoipupdate libmaxminddb0 libmaxminddb-dev mmdb-bin

MaxMind 가입후 계정ID / 라이센스키 삽입

라이센스는 안내에 나와있는거처럼 25개까지 라이센스 생성이 가능하고, 한번 생성한 키는 다시 열람이 안되니 생성후 GeoIP.conf 파일을 저장해놓아야 합니다. 파일 내용은 아래와 같습니다. (/etc/GeoIP.conf)

# GeoIP.conf file for `geoipupdate` program, for versions >= 3.1.1.
# Used to update GeoIP databases from https://www.maxmind.com.
# For more information about this config file, visit the docs at
# https://dev.maxmind.com/geoip/geoipupdate/.

# `AccountID` is from your MaxMind account.
AccountID yourID

# `LicenseKey` is from your MaxMind account
LicenseKey YourLicensekey

# `EditionIDs` is from your MaxMind account.
EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country

GeoIP2를 최신 데이터로 업데이트 합니다.

geoipupdate

크론탭에 GeoIP2 데이터베이스 자동 업데이트 등록

crontab -e
# 매주 월요일 오전3시 업데이트 실행
0 3 * * Mon /usr/bin/geoipupdate

Nginx GeoIP2 모듈추가

cd /tmp
git clone https://github.com/leev/ngx_http_geoip2_module.git

아래 깃 링크에 가면 자세한 설치방법과 사용예시가 있습니다.
https://github.com/leev/ngx_http_geoip2_module

Nginx 컴파일 하기

현재 자신이 사용하는 Nginx 버전을 확인하고 다운로드 받습니다.

wget http://nginx.org/download/nginx-VERSION.tar.gz
tar zxvf nginx-VERSION.tar.gz
cd nginx-VERSION
./configure --with-compat --add-dynamic-module=../ngx_http_geoip2_module
make modules

Nginx GeoIP2 모듈복사

cp objs/ngx_http_geoip2_module.so /usr/lib/nginx/modules/
echo "load_module modules/ngx_http_geoip2_module.so;" > /etc/nginx/modules-available/mod-http-geoip2.conf
ln -s /etc/nginx/modules-available/mod-http-geoip2.conf /etc/nginx/modules-enabled/60-mod-http-geoip2.conf

좀더 간편하게 바로 복사해서 사용할수 있습니다.

mkdir -p /etc/nginx/modules

cp -vi objs/ngx_http_geoip2_module.so /etc/nginx/modules/

Nginx 국가별 룰 환경설정 적용 및 테스트

nginx.conf파일의 http블록 안에 삽입, 기본적으로 fastcgi 파라미터가 옛날 버전으로 설정되어 있어, 필요에 따라 변수를 조정해줄 필요가 있습니다.

geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
    auto_reload 60m;
    $geoip2_metadata_country_build metadata build_epoch;
    $geoip2_data_country_code country iso_code;
    $geoip2_data_country_name country names en;
}
geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb {
    auto_reload 60m;
    $geoip2_metadata_city_build metadata build_epoch;
    $geoip2_data_city_name city names en;
}
fastcgi_param COUNTRY_CODE $geoip2_data_country_code;
fastcgi_param COUNTRY_NAME $geoip2_data_country_name;
fastcgi_param CITY_NAME    $geoip2_data_city_name;

국가차단 기본 설정, 테스트를 위해 한국 차단, 기본은 전체 접근 허용 (http 블록안에 넣기)

map $geoip2_data_country_code $domain_allowed_country {
    default yes;
    KR no;
}

가상호스트에 허용국가가 아닐경우 444리턴(응답없음)

location / {
    if ($domain_allowed_country = no) {
        return 444;
    }
}

우분투 20.04 & 워드프레스 사용시 에러가 발생할경우 로케이션빼고 넣어주면 됩니다.

if ($domain_allowed_country = no) {
        return 444;
    }

또는 원하는 도메인으로 리다이렉트

location / {
    if ($geoip2_data_country_code = KR) {
        return 301 https://domain.com$request_uri;
    }
}

출처 URL : https://blog.kinsdayz.com/2020/07/25/nginx-geoip2%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EB%B6%88%EB%9F%89%ED%95%9C-%EC%A0%91%EC%86%8D%EA%B5%AD%EA%B0%80-%EB%A7%89%EB%8A%94-%EB%B0%A9%EB%B2%95/

이 게시글이 문제가 될 시, 삭제처리 하겠습니다.