nginx: ACME(Let’s Encrypt) webroot 챌린지 설정

/.well-known/acme-challenge/ 경로만 안전하게 열어 certbot/ACME HTTP-01을 통과시키는 패턴

분야: DevOps/인프라 nginxhttpssslletsencryptacmecertbot

Let’s Encrypt는 HTTP-01 챌린지에서 /.well-known/acme-challenge/... 경로에 특정 파일이 “정확히 서빙되는지” 확인합니다.

초보자 튜토리얼(처음부터 HTTPS까지): nginx로 정적 웹사이트 + HTTPS 구축하기

관련 용어: ACME, certbot

webroot 패턴 (권장)

# server { ... } 안
location ^~ /.well-known/acme-challenge/ {
  root /var/www/letsencrypt;
  default_type "text/plain";
}

운영 팁

  • root 디렉터리는 정적 루트와 분리하는 편이 안전합니다. (웹루트에 잡다한 파일이 섞이지 않게)
  • /.well-known/ 전체를 열지 말고, acme-challenge만 여는 편이 실수 방지에 유리합니다.

차단 규칙과 같이 쓰기 (실수 방지)

아래와 같이 “숨김 파일”을 차단하되, Let’s Encrypt 경로는 예외로 둡니다.

location ~ /\.(?!well-known) {
  return 404;
}

관련 템플릿: nginx: 민감 파일(.env/.git/백업) 차단

확인 방법

sudo nginx -t && sudo systemctl reload nginx
sudo mkdir -p /var/www/letsencrypt/.well-known/acme-challenge
echo ok | sudo tee /var/www/letsencrypt/.well-known/acme-challenge/ping >/dev/null
curl -fsS http://example.com/.well-known/acme-challenge/ping

같은 분야의 템플릿