본문 바로가기

리눅스

Nginx에서 map 디렉티브를 사용하는 방법

728x90

Nginx에서 map 디렉티브를 사용하는 방법

map 디렉티브는 Nginx에서 변수를 다른 값으로 매핑할 때 사용됩니다. 이 디렉티브를 사용하면 특정 조건에 따라 변수의 값을 동적으로 변경할 수 있습니다. 예를 들어 호스트명에 따라 다른 설정을 적용하거나 특정 경로에 대한 요청을 다른 서버로 프록시하는 등의 작업에 활용됩니다.

 

기본적인 map 디렉티브의 사용 예제입니다.

http {
    map $host $my_var {
        default   "default_value";
        site.com  "value_for_site";
        www.site.com "value_for_www_site";
        m.site.com "value_for_m_site";
    }

    server {
        listen 80;
        server_name site.com www.site.com m.site.com;

        location / {
            # 사용 예: $my_var를 통해 다른 동작을 수행할 수 있습니다.
            add_header X-My-Var $my_var;
            # ...
        }
    }
}

이 예제에서는 $host 변수의 값에 따라 $my_var 변수를 매핑하고 각 호스트에 대해 다른 값을 부여했습니다. 이제 해당 변수를 사용하여 원하는 대로 동작을 구성할 수 있습니다.

 

실제로는 다양한 상황에서 map 디렉티브를 사용할 수 있으며 이는 규모가 큰 Nginx 구성에서 특히 유용합니다. 설정 변경 후에는 Nginx를 다시 로드하거나 재시작해야 적용됩니다.

728x90

map 디렉티브를 사용하여 $host를 기반으로 동적으로 robots.txt 파일을 선택하는 예제

이 설정은 호스트의 값에 따라 다른 robots.txt 파일을 사용할 수 있도록 합니다.

  • 가상호스트 파일 편집
vim /etc/nginx/conf.d/t1.sangchul.kr.conf
map $host $robots_file {
    default             robots.txt;
    t1.sangchul.kr      robots-t1.txt;  
    t2.sangchul.kr      robots-t2.txt;
}

server {
    listen       80;
    server_name  t1.sangchul.kr t2.sangchul.kr;

    access_log  /var/log/nginx/t1.sangchul.kr-access.log main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location = /robots.txt {
        alias /usr/share/nginx/html/$robots_file;
    }
...
}

이 설정에서는 $host 변수의 값을 기반으로 $robots_file 변수를 설정합니다. 그리고 /robots.txt 요청이 들어올 때 alias 지시어를 사용하여 해당 파일을 제공합니다.

 

  • robots.txt 파일 생성 및 확인
echo "robots" > /usr/share/nginx/html/robots.txt
$ cat /usr/share/nginx/html/robots.txt 
robots
echo "t1.sangchul.kr" > /usr/share/nginx/html/robots-t1.txt
$ cat /usr/share/nginx/html/robots-t1.txt 
t1.sangchul.kr
echo "t2.sangchul.kr" > /usr/share/nginx/html/robots-t2.txt
$ cat /usr/share/nginx/html/robots-t2.txt  
t2.sangchul.kr
  • Nginx 재시작
    • 설정을 변경한 후에는 Nginx를 다시 로드하거나 재시작해야 적용됩니다.
sudo systemctl restart nginx
  • curl 명령어로 웹 페이지 테스트
curl http://t1.sangchul.kr/robots.txt
$ curl http://t1.sangchul.kr/robots.txt                      
t1.sangchul.kr
curl http://t2.sangchul.kr/robots.txt
$ curl http://t2.sangchul.kr/robots.txt
t2.sangchul.kr

 

참고URL

- nginx docs : Module ngx_http_map_module

- bluegrid.io Blog Tech : How the Nginx ngx_http_map_module works

- DZone Technical Library : About Using Regexp in Nginx Map

 

728x90