처음엔 자동 설정이 쉬워 보였는데 결국 직접 쓰게 된 nginx.conf 이야기

Lily·2025년 5월 22일
2
post-thumbnail

처음 프렌즈 앱을 배포할 때 HTTPS 설정을 도커로 어떻게 구성할지 고민이 많았다. 뭘 어디서부터 시작해야 할지 몰라서 많이들 사용하는 방식을 일단 따라가 보기로 했다.

그래서 처음에는 nginx-proxyletsencrypt-companion 조합을 사용해봤다.


1. nginx-proxy + letsencrypt-companion 조합으로 시작한 이유

많이 쓰는 방식이고 도커 컴포즈에 환경 변수만 잘 넣으면 인증서까지 자동으로 발급된다고 해서 그걸로 시작했다.

  • nginx-proxy: 컨테이너를 자동으로 감지해 리버스 프록시 설정
  • letsencrypt-companion: 도메인 기반으로 인증서를 자동 발급해줌

VIRTUAL_HOST, LETSENCRYPT_HOST, LETSENCRYPT_EMAIL 환경 변수를 설정하고 도커 컴포즈로 실행하면 HTTPS 접속이 바로 가능했다.

처음엔 이 정도 설정만으로 HTTPS까지 적용된다는 게 신기했다.


2. 쓰다가 실수로 인증서를 계속 새로 발급했다

도커 컨테이너를 여러 번 띄웠다 내렸다 하다 보니 인증서가 자꾸 새로 발급되고 있다는 걸 알게 됐다.

이유는 내가 컨테이너를 내릴 때 -v 옵션을 줘서 인증서가 저장돼 있던 볼륨까지 같이 삭제되고 있었던 거였다.
그때는 광고용으로 app-ads.txt 파일을 서빙하려고 nginx 관련 설정을 건드렸었고 뭔가 잘 안 되길래 컨테이너를 아예 지우고 다시 띄우고 싶어서 --volumes 옵션까지 줬다.

결국 매번 컨테이너를 새로 만들면서 인증서도 처음부터 다시 발급되는 상황이 반복되고 있었다.
이렇게 계속 인증서를 새로 발급하다 보니 결국 인증서 발급 rate limit에 걸려버렸다 😇😇
(덕분에 강제로 며칠간 앱 작동 안했음)


3. 그래서 nginx를 직접 설정해보기로 함

자동화된 구조를 믿고 쓰는 것도 좋지만 이번엔 직접 구조를 하나씩 설정해보기로 했다.
그래서 nginx 컨테이너를 따로 만들고 설정 파일을 직접 작성하기 시작했다.

  • nginx.conf에 리버스 프록시 설정을 수동으로 작성
  • server_name, ssl_certificate, ssl_certificate_key를 내가 만든 인증서 경로 기준으로 지정
  • certbot이 발급한 인증서를 nginx 컨테이너에서 읽을 수 있게 도커 볼륨으로 연결

전에는 그냥 자동으로 되니까 그런가보다 하고 넘겼던 부분들이 이제는 대략 왜 그런 설정이 필요한지 감이 오기 시작했다.


4. 정리

  • 인증서 설정은 한 번만 하면 되는 게 아니라 이후 관리 방식도 고려해야 한다.
  • nginx는 기본 설정 흐름만 이해해도 직접 필요한 구성은 만들 수 있다.
profile
우왓

0개의 댓글