WEB,WAS

[WEB/WAS] Nginx subdomain 추출 방법 (정규식, map)

IT-PAPA 2023. 5. 14. 13:43
728x90
반응형

nginx의 map 지시문을 사용하여 subdomain을 추출하는 방법과 map 문법에 대해 설명드리겠습니다.

map 지시문은 변수와 값을 매핑하는데 사용됩니다. 일반적으로 정규식 패턴을 이용하여 값을 추출하거나 조건에 따라 다른 값을 할당할 수 있습니다. 이를 활용하여 subdomain을 추출할 수 있습니다.

다음은 map 지시문을 사용하여 subdomain을 추출하는 예시입니다:

http {
    map $host $subdomain {
        ~^(?<sub>[^.]+)\.example\.com$ $sub;
        default "";
    }
    
    server {
        ...
    }
}

위의 설정에서는 $host 변수를 사용하여 현재 요청이 들어온 호스트명을 가져옵니다. 그리고 map 지시문을 사용하여 $host 값과 정규식 패턴을 비교하여 subdomain을 추출합니다.

~^(?<sub>[^.]+)\.example\.com$는 정규식 패턴으로, (?<sub>[^.]+) 부분은 서브도메인 명을 추출하는데 사용되는 부분입니다. 여기서 sub은 변수명이고 [^.]+는 마침표를 제외한 모든 문자열을 의미합니다.
$sub은 map 지시문에서 $host 값과 일치하는 경우 추출한 서브도메인을 할당하는 변수입니다.
default ""는 $host 값이 위의 정규식 패턴과 일치하지 않는 경우에 대한 기본값을 설정합니다.
이제 $subdomain 변수를 다른 부분에서 사용하여 필요한 작업을 수행할 수 있습니다.

map 문법은 다음과 같이 구성됩니다:

map $variable $value {
    pattern1 value1;
    pattern2 value2;
    ...
    default value;
}

$variable은 비교할 변수명입니다. 주로 $host나 $request_uri 등을 사용합니다.
pattern은 비교할 정규식 패턴이나 값입니다.
value는 $variable 값과 일치하는 경우 할당되는 값을 나타냅니다.
default는 $variable 값이 위의 패턴과 일치하지 않는 경우에 대한 기본값을 설정합니다.
map 지시문을 사용하여 변수와 값을 매핑함으로써, 서브도메인을 추출하거나 다양한 상황에 따라 변수에 값을 할당할 수 있습니다.

map 으로 추출된 subdomain 을 access log 와 proxy_pass 에 사용

http {
    map $host $subdomain {
        ~^(?<sub>[^.]+)\.example\.com$ $sub;
        default "";
    }

    log_format main '$remote_addr - $subdomain [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';

    server {
        ...
        access_log /var/log/nginx/access-$subdomain.log main;
        proxy_pass $backend;
        ...
    }
}

 

if 문을 이용한 subdomain 셋팅

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
}

server {
    listen 80;
    server_name ~^(?<subdomain>.+)\.example\.com$;
    set $backend "backend1.example.com";
    if ($subdomain = "subdomain2") {
        set $backend "backend2.example.com";
    }
    location / {
        proxy_pass http://$backend;
    }
}

 

728x90
반응형
LIST