Posts nginx에서 환경변수 사용하는 방법
Post
Cancel

nginx에서 환경변수 사용하는 방법

nginx.conf 에서 환경변수 사용

nginx.conf에서 환경변수를 사용하여 동적으로 nginx 설정을 변경하는 방법을 알아보자.

envsubst 사용하는 방법

envsubst는 인풋으로부터 $VARIABLE 또는 ${VARIABLE}로 되어있는 값을 읽어 환경변수로 바꾸어주는 프로그램이다. envsubst을 활용해서 nginx.template 파일로 환경변수가 사용된 nginx 설정파일을 작성하고, nginx가 실행될 때 envsubst를 사용해 변환해주면 된다.

step 1 : nginx.template 파일 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;

        root   /home1/irteam/deploy/client/build;
        index  index.html index.htm;

        location / {
                try_files ${DOLLAR}uri ${DOLLAR}uri/ /index.html = 404;
        }                                                                                                               
        location /api {
                proxy_pass http://${SPRING_HOST_NAME}:${SPRING_HOST_PORT};
        }
  }
}
  • 환경 변수가 들어갈 자리는 ${}로 감쌌다.
    • ${SPRING_HOST_NAME} : 스프링 서버의 호스트 이름
    • ${SPRING_HOST_PORT} : 스프링 서버의 포트번호
    • ${DOLLAR} : envsubst을 사용하면 $로 시작하는 값은 전부 치환한다. 값이 존재하지 않을 경우 공백으로 변하므로, DOLLAR 환경변수를 새롭게 선언하여 $가 필요할 땐 ${DOLLAR}로 사용하자.

step 2 : 실행 시 envsubst 사용

1
2
3
4
5
6
curl -L https://github.com/a8m/envsubst/releases/download/v1.2.0/envsubst-`uname -s`-`uname -m` -o envsubst # 1
chmod +x envsubst 
export DOLLAR='$'  # 2
export SPRING_HOST_NAME='localhost'
export SPRING_HOST_PORT="8080"
./envsubst '${SPRING_HOST_NAME} ${SPRING_HOST_PORT} ${DOLLAR}' < nginx.template > nginx.conf  # 3
  1. envsubst가 없는 환경에서는 새로 설치한다.
  2. 환경변수를 설정하였다
  3. envsubst을 사용해 nginx.template 파일을 nginx.conf 파일로 컴파일했다.

step 3 : 결과 확인

다음과 같이 nginx.conf 파일이 환경변수로 설정한 대로 나왔다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;

        root   /home1/irteam/deploy/client/build;
        index  index.html index.htm;

        location / {
                try_files $uri $uri/ /index.html = 404;
        }                                                                                                               
        location /api {
                proxy_pass http://localhost:8080;
        }
  }
}


docker nginx 이미지 사용하는 방법.

만약 nginx를 도커 컨테이너에서 사용하고, 베이스 이미지가 nginx라면, 더 쉬운 방법이 있다.

nginx 1.19 이미지부터는 envsubst를 자동으로 지원한다. 다만 docker-compose와 함께 사용해야한다.

1
2
3
4
5
6
7
8
9
web:
  image: nginx
  volumes:
   - ./templates:/etc/nginx/templates
  ports:
   - "8080:80"
  environment:
   - NGINX_HOST=foobar.com
   - NGINX_PORT=80

링크


출처

  • https://serverfault.com/questions/577370/how-can-i-use-environment-variables-in-nginx-conf
This post is licensed under CC BY 4.0 by the author.

kubernetes 실습

쿠버네티스 Ingress

Comments powered by Disqus.