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;
}
}
'WEB,WAS' 카테고리의 다른 글
[Nginx] nginx websocket 통신을 위한 설정방법 (1) | 2023.06.13 |
---|---|
[DB] postgresql 데이터 마이그레이션 방법 (1) | 2023.05.23 |
[WEB/WAS] Nginx 모니터링 방법 (2) | 2023.05.17 |
[WEB/WAS] Nginx log_format 사용 방법 (0) | 2023.05.16 |
[WEB/WAS] nginx conf 파일에서 취약점 조치 사항 (2) | 2023.05.15 |