기본적으로 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 |