NGINX Plus GeoIP2 모듈을 사용한 국가별 서비스 라우팅
이 포스트에서는 NGINX Plus GeoIP2 모듈을 활용하여 사용자의 IP 주소를 기반으로 국가별 트래픽을 효율적으로 라우팅하는 방법을 설명합니다.
이를 통해 특정 지역에 맞춘 서비스 제공과 성능 최적화를 실현할 수 있습니다. 설정 방법과 실용적인 예제를 통해 이해를 돕겠습니다.
목차
1. NGINX Plus GeoIP2 모듈 개요
2. NGINX Plus GeoIP2 모듈로 허용 국가별 서비스 라우팅
2-1. 서비스 라우팅 테스트
3. 각 국가만 허용하는 서비스 라우팅
4. 결론
1. NGINX Plus GeoIP2 모듈 개요
GeoIP2 모듈은 사용자의 IP 주소를 기반으로 지리적 위치를 파악하고, 이를 통해 트래픽을 효율적으로 관리할 수 있도록 도와주는 기능입니다. 이 모듈은 주로 두 가지 목적으로 사용됩니다:
- 지리적 라우팅: 사용자의 위치에 따라 적절한 서버나 콘텐츠를 제공할 수 있습니다. 예를 들어, 특정 국가의 사용자에게는 해당 지역에 최적화된 웹사이트나 서비스를 제공할 수 있습니다.
- 접근 제어: 특정 국가에서의 접근을 차단하거나 허용하는 등의 보안 정책을 설정할 수 있습니다. 이를 통해 원치 않는 트래픽을 줄이고, 보안 강화를 도모할 수 있습니다.
GeoIP 모듈은 MaxMind의 GeoLite 데이터베이스와 같은 외부 데이터베이스를 사용하여 IP 주소를 지리적 위치로 매핑합니다.
사용자는 NGINX 설정 파일에서 이 모듈을 활성화하고, 필요에 따라 다양한 지리적 기반의 규칙을 설정할 수 있습니다.
설정 예시로는 국가별로 다른 리디렉션을 설정하거나 특정 콘텐츠를 제공하는 등의 작업이 있습니다. 이 모듈을 통해 웹사이트의 사용자 경험을 향상시키고, 운영 효율성을 높일 수 있습니다.
NGINX Plus GeoIP2 설치 및 기본 구성에 대한 내용은 아래 포스트에서 확인할 수 있습니다.
2. NGINX Plus GeoIP2 모듈로 허용 국가별 서비스 라우팅
NGINX Plus GeoIP2 모듈을 사용하여 사용자의 국가를 확인하고, 특정 국가에서만 접근을 허용하는 로직을 구현하고 있습니다. 이 예시 구성에서는 한국(KR), 미국(US), 일본(JP) 사용자는 허용되지만, 다른 국가에서는 차단됩니다.
# 한국 서비스
upstream KR {
zone kr 64k;
server xxx.xxx.xxx.104:8001;
}
# 미국 서비스
upstream US {
zone us 64k;
server xxx.xxx.xxx.104:8002;
}
# 일본 서비스
upstream JP {
zone jp 64k;
server xxx.xxx.xxx.104:8003;
}
# 한국, 미국, 일본 국가에 대해 허용하는 map 블록
map $geoip2_data_country_code $block {
default no;
KR yes;
US yes;
JP yes;
}
server {
listen 80;
server_name xxx.xxx.xxx.104;
access_log /var/log/nginx/access.log;
location / {
# if 지시문을 사용하여 허용되지 않은 국가의 접속은 403 반환
if ($block = no) {
return 403;
}
# 허용된 국가는 각 국가의 location 블록으로 redirect
return 301 http://xxx.xxx.xxx.104/$geoip2_data_country_code/;
}
# redirect된 요청을 각 국가별 upstream으로 proxy
location ~* "^/(KR|US|JP)" {
access_log /var/log/nginx/ct.log;
proxy_pass http://$geoip2_data_country_code;
}
}
위와 같이 구성하게 되면 다음과 같습니다.
- 1한국에서 “http://xxx.xxx.xxx.104″로 요청 시 “http://xxx.xxx.xxx.104:8001/KR/”로 proxy 됩니다.
- 미국에서 “http://xxx.xxx.xxx.104″로 요청 시 “http://xxx.xxx.xxx.104:8002/US/”로 proxy 됩니다.
- 일본에서 “http://xxx.xxx.xxx.104″로 요청 시 “http://xxx.xxx.xxx.104:8003/JP/”로 proxy 됩니다.
2-1. 서비스 라우팅 테스트
한국에서 http://xxx.xxx.xxx.104 요청:

미국에서 http://xxx.xxx.xxx.104 요청:

일본에서 http://xxx.xxx.xxx.104 요청:

허용되지 않은 국가의 요청:

구성에서와 같이 허용되지 않은 국가에서 요청 시 403 Forbidden 에러가 발생하는 것을 확인할 수 있습니다.
별도로 로그 포맷을 수정하여 로그를 확인해보면 허용된 국가인 JP(Japen), US(U.S.A) 등 허용된 국가는 redirection 된 것을 확인할 수 있고, 허용되지 않은 국가는 403 Forbidden이 발생한 것을 확인할 수 있습니다.

3. 각 국가만 허용하는 서비스 라우팅
만약 각 국가에서만 서비스 라우팅을 구성하려면 다음과 같습니다.
upstream KR {
zone kr 64k;
server xxx.xxx.xxx.104:8001;
}
upstream US {
zone us 64k;
server xxx.xxx.xxx.104:8002;
}
upstream JP {
zone jp 64k;
server xxx.xxx.xxx.104:8003;
}
map $geoip2_data_country_code $block {
default no;
KR yes;
US yes;
JP yes;
}
server {
listen 80;
server_name xxx.xxx.xxx.104;
access_log /var/log/nginx/country-access.log country;
location / {
if ($block = no) {
return 403;
}
return 301 http://xxx.xxx.xxx.104/$geoip2_data_country_code/;
}
location /KR/ {
access_log /var/log/nginx/ct.log;
if ($geoip2_data_country_code != KR) {
return 403;
}
proxy_pass http://$geoip2_data_country_code;
}
location /US/ {
if ($geoip2_data_country_code != US) {
return 403;
}
proxy_pass http://us;
}
location /JP/ {
if ($geoip2_data_country_code != JP) {
return 403;
}
proxy_pass http://jp;
}
}
위와 같이 구성하게 되면 한국 서비스는 한국만, 미국 서비스는 미국만, 일본 서비스는 일본만 접근 가능하며, 다른 나라에 접근시 403 에러를 반환하게 됩니다.
한국 -> 한국 서비스

한국 -> 미국 서비스

미국 -> 미국

미국 -> 한국

4. 결론
결론적으로, NGINX Plus GeoIP2 모듈을 활용한 국가별 서비스 라우팅은 웹 애플리케이션의 성능과 사용자 경험을 향상시키는 강력한 도구입니다.
이를 통해 사용자의 위치에 따라 최적화된 콘텐츠를 제공함으로써, 로드 시간 단축과 사용자 만족도를 높일 수 있습니다. 또한, 특정 국가에 대한 맞춤형 서비스 제공은 비즈니스의 경쟁력을 강화하는 데 큰 도움이 됩니다.
이러한 기술을 통해 글로벌 시장에서의 도약을 꿈꾸는 기업들은 더욱 효과적으로 고객의 니즈를 충족할 수 있으며, NGINX Plus의 유연성과 확장성을 활용하여 변화하는 환경에 신속하게 대응할 수 있습니다.
앞으로도 GeoIP2 모듈을 통해 다양한 가능성을 탐색하고, 더 나은 사용자 경험을 제공하는 방법을 고민해 보시기 바랍니다.
NGINX Plus GeoIP2 모듈을 직접 사용해 보시려면 30일 무료 평가판을 신청하거나 NGINX STORE에 연락하여 논의하십시오.
댓글을 달려면 로그인해야 합니다.