본문 바로가기
BackEnd/개발

[개발] Nginx 환경변수 사용 방법

by 경험의 가치 2024. 5. 8.

기본적으로 Nginx는 환경변수를 지원하지 않는다. 그럼에도 불구하고, 환경변수를 사용하고 싶으면 어떻게 Dockerfile을 구성해야 할까?

 

upstream spring_gateway {
    server spring_gateway:8081;
}

server {
    listen 80;
    server_name ${SERVER_NAME};
    access_log off;
    server_tokens off;
    client_max_body_size 1G;

    location /.well-known/acme-challenge/ {
        allow all;
        root /var/www/certbot;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl;
    server_name ${SERVER_NAME};
    access_log off;
    server_tokens off;
    client_max_body_size 1G;

    ssl_certificate /etc/letsencrypt/live/${SERVER_NAME}/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/${SERVER_NAME}/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

     location / {
        proxy_pass http://spring_gateway;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Forwarded-Proto $scheme;
     }
}

 

우선 내가 원하는 Nginx 파일을 작성하자. 나는 서버 주소가 노출되는게 싫어서 SERVER_NAME을 환경변수로 처리했다. 그다음 Dockerfile에는

 

FROM nginx
COPY default.conf.template /etc/nginx/conf.d/default.conf.template
ENTRYPOINT ["/bin/bash", "-c", "envsubst '${SERVER_NAME}' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"]

 

이렇게 envsubst라는 명령어를 이용해서 환경변수를 주입할 수 있다. 이제 docker-compose나 docker run할 때 환경변수 주입해주면 끝!!

'BackEnd > 개발' 카테고리의 다른 글

[개발] NGINX 기초  (0) 2024.11.12
[개발] Docker Compose로 검색용 OpenSearch 띄우기  (0) 2024.11.06
[개발] 채팅 구현에 대한 고찰  (0) 2024.04.30