ngx_http_map_module 모듈을 통해 서브 도메인 분기처리 수행
이 블로그 포스트에서는 ngx_http_map_module 모듈을 사용하여 User-Agent에 따라 다양한 서브 도메인으로 트래픽을 분기하는 구체적인 예시와 설정 방법을 설명합니다. 이를 통해 사용자 환경에 따라 맞춤형 콘텐츠 제공을 실현하는 방법을 소개합니다.
목차
1. ngx_http_map_module 소개
1-1. ngx_http_map_module 의 주요 기능
2. User-Agent 헤더 기반 트래픽 분기 설정
2-1. User-Agent 헤더 분석을 위한 map 지시어 설정
2-2. ngx_http_map_module 모듈을 통한 서브 도메인 분기 처리 구현
3. map 지시문을 통한 분기 처리 테스트
4. 결론
1. ngx_http_map_module 소개
1-1. ngx_http_map_module 의 주요 기능
ngx_http_map_module은 NGINX 설정에서 특정 조건에 따라 값을 매핑하여 다양한 처리 로직을 구현할 수 있도록 돕는 모듈입니다. 주로 요청의 헤더나 변수 값을 바탕으로 다양한 값을 설정하는 데 사용됩니다. 이 모듈은 User-Agent와 같은 헤더 값을 분석하고, 이를 통해 트래픽을 분기하여 사용자 환경에 맞는 맞춤형 콘텐츠를 제공할 수 있습니다.
2. User-Agent 헤더 기반 트래픽 분기 설정


User-Agent는 사용자 기기 및 브라우저 정보를 담고 있어, 이를 통해 모바일 또는 데스크톱 등 사용자 환경에 맞는 맞춤형 서브 도메인으로 분기할 수 있습니다. NGINX의 map 지시문을 통해 User-Agent의 특정 문자열을 분석하고 이를 기준으로 값을 설정함으로써 효과적으로 분기 처리를 구현할 수 있습니다.
2-1. User-Agent 헤더 분석을 위한 map 지시어 설정
ngx_http_map_module을 사용해 User-Agent 헤더에 따라 트래픽을 다양한 서브 도메인으로 라우팅하는 설정 방법을 설명합니다.
모바일 사용자는 m.example.com, 데스크톱 사용자는 www.example.com으로 트래픽을 분기하여 각 사용자에게 적합한 콘텐츠를 제공할 수 있습니다.

# User-Agent에 따라 서브 도메인을 설정할 map 정의
map $http_user_agent $subdomain {
default "www"; # 기본 도메인
"~*Mobile" "m"; # Mobile이라는 문자열이 User-Agent에 포함된 경우 m 서브 도메인
}
이러한 설정을 통해 다양한 사용자 환경에 최적화된 웹 환경을 구축할 수 있습니다.
2-2. ngx_http_map_module 모듈을 통한 서브 도메인 분기 처리 구현
map 지시어를 사용하여 $http_user_agent 변수 값을 분석하여 $subdomain 변수를 설정합니다.
map $http_user_agent $subdomain {
default "www"; # 기본 서브 도메인
"~*Mobile" "m"; # User-Agent에 "Mobile"이 포함된 경우 "m" 서브 도메인
}
이 설정에서는 User-Agent 값에 Mobile이라는 문자열이 포함된 경우 $subdomain에 m이 할당되며, 기본적으로는 www가 할당됩니다.
기본 서버 블록은 www.example.com으로, 이 서버 블록은 $subdomain 변수의 값에 따라 분기 처리를 수행합니다.
server {
listen 80;
# 기본 도메인으로 요청을 받을 호스트 설정
server_name www.example.com;
# $subdomain에 따라 요청을 다른 서브 도메인으로 리디렉션
location / {
if ($subdomain != "www") {
return 302 http://$subdomain.example.com$request_uri;
}
# 기본 도메인(www)일 경우의 처리 로직
proxy_pass http://www_backend;
}
}
if조건문은$subdomain이www가 아닐 경우, 해당 요청을$subdomain.example.com으로 Redirection 합니다.- 기본 도메인
www인 경우는 별도의 Redirection 없이 백엔드 서버인www_backend로 요청을 전달합니다.
모바일 트래픽을 처리하기 위한 별도 서버 블록 m.example.com을 설정하여 모바일 사용자에 맞는 백엔드 서버로 요청을 전달합니다.
server {
listen 80;
server_name m.example.com;
location / {
proxy_pass http://mobile_backend;
}
}
- 이 블록은
m.example.com으로 접근하는 모든 요청을 모바일 백엔드 서버(mobile_backend)로 전달합니다. - 이를 통해 모바일 사용자는
m.example.com을 통해 최적화된 콘텐츠를 제공받을 수 있습니다.
전체 NGINX 구성 파일은 NGINX STORE GitHub에서도 확인할 수 있습니다.
3. map 지시문을 통한 분기 처리 테스트
분기 처리 설정을 마친 후에는 정확한 동작을 확인하기 위해 테스트가 필요합니다. curl 명령어 혹은 브라우저 도구를 사용해 User-Agent 헤더를 설정하고 요청을 보내어 각기 다른 서브 도메인으로 트래픽이 제대로 분기되는지 확인할 수 있습니다. 이를 통해 설정의 정확성과 효과를 검증할 수 있습니다.
브라우저 도구를 통해 example.com 으로 접속합니다. NGINX의 map 지시문 구성을 통해 데스크탑 사이트인 www_backend 백엔드로 요청이 전달되는 것을 확인할 수 있습니다.

브라우저 도구를 통해 모바일 환경에서 example.com으로 접속합니다. NGINX의 map 지시문 구성을 통해 모바일 사이트인 mobile_backend 백엔드로 요청이 전달되고, URI Redirection을 통해 URI가 m.example.com 으로 변경된 것을 확인할 수 있습니다.

curl 요청을 통해 User-Agent 별로 다른 응답을 확인할 수 있고, User-Agent 헤더가 Mobile일 경우 URI Redirection을 통해 example.com 호스트에서 m.exmaple.com 호스트로 요청이 Redirection 되는 것을 확인할 수 있습니다.


4. 결론
이번 포스트에서는 ngx_http_map_module을 사용하여 User-Agent 헤더에 따른 트래픽 분기 설정을 구현하는 방법을 다뤘습니다.
이 방법을 통해 사용자 환경에 따라 적합한 콘텐츠를 제공할 수 있으며, NGINX의 map 지시문을 통해 보다 유연하고 효율적인 트래픽 관리를 실현할 수 있습니다.
NGINX의 다양한 모듈을 통해 헤더에 따른 트래픽 분기 설정을 구현하거나, A/B 테스팅을 구현하는 방법, 또는 다양한 모듈에 대해 동적인 NGINX를 구성하는 방법에 대해 자세히 알아보려면 NGINX STORE 블로그의 NGINX 카테고리를 참고하세요.
댓글을 달려면 로그인해야 합니다.