Skip to content

fix: nginx SSL 인증서 자동 갱신 안정화 #54

Description

@Hexeong

어떤 버그인가요

Nginx SSL 인증서 발급/갱신 자동화가 운영 중 안정적으로 동작하기 어려운 구조입니다.

현재 monitoring_stack의 nginx 설정 스크립트는 인증서 발급에 certbot certonly --standalone 방식을 사용합니다. 이 방식은 HTTP-01 challenge 수행 시 80번 포트를 certbot이 직접 사용해야 하므로, nginx가 이미 실행 중인 갱신 시점에는 포트 점유 충돌로 갱신이 실패할 수 있습니다.

또한 자동 갱신 cron이 실행 사용자 crontab에 등록되어 root 권한 실행이 명확하지 않고, 갱신 전후 nginx 제어 방식도 standalone 방식과 충분히 맞춰져 있지 않습니다.

관련 파일:

  • modules/monitoring_stack/scripts/nginx_setup.sh.tftpl
  • modules/monitoring_stack/ec2.tf
  • environment/monitoring/main.tf

추가로 monitoring_stack/ec2.tf에서는 cloud-init으로 /home/ubuntu/setup_nginx.sh 파일만 생성하고, 기존 인스턴스에 스크립트 변경 사항을 다시 실행하는 경로가 부족합니다. user_data 변경도 ignore되고 있어 nginx 설정 스크립트 수정이 실제 EC2에 자동 반영되지 않습니다.

재현 방법(선택)

  1. modules/monitoring_stack/scripts/nginx_setup.sh.tftpl의 certbot 발급/갱신 방식을 확인합니다.
  2. 최초 발급은 certbot certonly --standalone 방식으로 수행되는 것을 확인합니다.
  3. 자동 갱신 cron은 nginx 중지 pre-hook 없이 certbot renew 중심으로 등록되는 것을 확인합니다.
  4. modules/monitoring_stack/ec2.tf에서 nginx setup script가 cloud-init으로 생성만 되고, 이후 변경 사항을 기존 인스턴스에 재실행하는 경로가 없는 것을 확인합니다.

참고할만한 자료(선택)

수정 방향

권장 방향은 webroot 방식으로 전환하여 nginx를 중지하지 않고 인증서를 발급/갱신하도록 개선하는 것입니다.

예상 작업:

  • nginx에 /.well-known/acme-challenge/ location 추가
  • certbot 발급/갱신을 --webroot -w /var/www/certbot 기반으로 변경
  • root 권한으로 동작하는 cron 또는 systemd timer로 자동 갱신 구성
  • 갱신 성공 후 systemctl reload nginx 실행
  • monitoring stack에도 기존 EC2에 nginx 설정 스크립트를 재실행할 수 있는 운영 경로 추가

대안

standalone 방식을 유지한다면 다음을 보완해야 합니다.

  • 갱신 전 nginx stop pre-hook 추가
  • 갱신 후 nginx start/reload post-hook 추가
  • root cron 또는 systemd timer로 권한 명확화

완료 조건

  • SSL 인증서 자동 갱신이 nginx 포트 점유 문제 없이 동작합니다.
  • 갱신 후 nginx reload가 수행됩니다.
  • nginx 설정 스크립트 변경 사항을 기존 monitoring 인스턴스에 반영할 수 있는 경로가 있습니다.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions