어떤 버그인가요
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에 자동 반영되지 않습니다.
재현 방법(선택)
modules/monitoring_stack/scripts/nginx_setup.sh.tftpl의 certbot 발급/갱신 방식을 확인합니다.
- 최초 발급은
certbot certonly --standalone 방식으로 수행되는 것을 확인합니다.
- 자동 갱신 cron은 nginx 중지 pre-hook 없이
certbot renew 중심으로 등록되는 것을 확인합니다.
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 인스턴스에 반영할 수 있는 경로가 있습니다.
어떤 버그인가요
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.tftplmodules/monitoring_stack/ec2.tfenvironment/monitoring/main.tf추가로
monitoring_stack/ec2.tf에서는 cloud-init으로/home/ubuntu/setup_nginx.sh파일만 생성하고, 기존 인스턴스에 스크립트 변경 사항을 다시 실행하는 경로가 부족합니다.user_data변경도 ignore되고 있어 nginx 설정 스크립트 수정이 실제 EC2에 자동 반영되지 않습니다.재현 방법(선택)
modules/monitoring_stack/scripts/nginx_setup.sh.tftpl의 certbot 발급/갱신 방식을 확인합니다.certbot certonly --standalone방식으로 수행되는 것을 확인합니다.certbot renew중심으로 등록되는 것을 확인합니다.modules/monitoring_stack/ec2.tf에서 nginx setup script가 cloud-init으로 생성만 되고, 이후 변경 사항을 기존 인스턴스에 재실행하는 경로가 없는 것을 확인합니다.참고할만한 자료(선택)
수정 방향
권장 방향은
webroot방식으로 전환하여 nginx를 중지하지 않고 인증서를 발급/갱신하도록 개선하는 것입니다.예상 작업:
/.well-known/acme-challenge/location 추가--webroot -w /var/www/certbot기반으로 변경systemctl reload nginx실행대안
standalone방식을 유지한다면 다음을 보완해야 합니다.완료 조건