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으로 트래픽을 분기하여 각 사용자에게 적합한 콘텐츠를 제공할 수 있습니다.

ngx_http_map_module - map 지시문 사용
# 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이라는 문자열이 포함된 경우 $subdomainm이 할당되며, 기본적으로는 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 조건문은 $subdomainwww가 아닐 경우, 해당 요청을 $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 백엔드로 요청이 전달되는 것을 확인할 수 있습니다.

ngx_http_map_module 모듈을 통한 분기처리 테스트

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

ngx_http_map_module 모듈을 통한 분기처리 테스트

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 카테고리를 참고하세요.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required