nginx: ACME(Let’s Encrypt) webroot 챌린지 설정
/.well-known/acme-challenge/ 경로만 안전하게 열어 certbot/ACME HTTP-01을 통과시키는 패턴
Let’s Encrypt는 HTTP-01 챌린지에서 /.well-known/acme-challenge/... 경로에 특정 파일이 “정확히 서빙되는지” 확인합니다.
초보자 튜토리얼(처음부터 HTTPS까지): nginx로 정적 웹사이트 + HTTPS 구축하기
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