반응형
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
반응형
'리눅스' 카테고리의 다른 글
스크립트로 크론 작업을 추가하는 방법 (0) | 2023.12.08 |
---|---|
Grafana 대시보드를 가져오는 방법(Import dashboard) (0) | 2023.12.05 |
우분투에서 lsyncd를 사용하여 디렉토리 간에 변경 사항을 실시간으로 동기화하는 방법 (0) | 2023.12.01 |
rev 명령어 (0) | 2023.11.29 |
Jenkins 컨테이너에서 Docker를 실행하기 위해 Docker 이미지를 만들기(Jenkins in Docker) (0) | 2023.11.26 |