nginx로 정적 웹사이트 + HTTPS 구축하기 (Let’s Encrypt)
도메인 연결 → nginx 설치 → 사이트 설정 → certbot으로 SSL 발급/자동갱신까지, 초보자용 흐름 가이드
정적 웹사이트(HTML/CSS/JS)를 nginx로 서빙하고, Let’s Encrypt로 무료 SSL 인증서를 발급해 https://로 접속 가능하게 만드는 “처음부터 끝까지” 흐름 가이드입니다.
예시는 모두 익명화되어 있으며,
example.com을 사용합니다.
0) 준비물 (필수)
- 도메인 1개 (예:
example.com) - 서버 1대 (Ubuntu 계열 가정)
- DNS
A레코드가 서버 IP를 가리키도록 설정 - 방화벽/보안그룹에서 80/443 포트 오픈
1) 목표
http://example.com접속 → 자동으로https://example.com로 이동- nginx가 정적 파일을 서빙
- 인증서 자동 갱신이 동작
2) 원샷 명령줄 (복사-붙여넣기)
아래는 “정적 사이트 + nginx + certbot(HTTPS)”까지 한 번에 진행하는 스크립트입니다. 실행 전 DOMAIN, EMAIL만 바꿔주세요.
export DOMAIN="example.com"
export EMAIL="you@example.com"
sudo bash -euo pipefail <<BASH
set -euo pipefail
: "\${DOMAIN:?DOMAIN is required}"
: "\${EMAIL:?EMAIL is required}"
apt-get update -y
apt-get install -y nginx certbot python3-certbot-nginx
mkdir -p "/var/www/\${DOMAIN}/html"
mkdir -p /var/www/letsencrypt
cat >"/var/www/\${DOMAIN}/html/index.html" <<'HTML'
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>It works</title>
</head>
<body>
<h1>It works</h1>
<p>nginx + HTTPS (Let’s Encrypt) setup completed.</p>
</body>
</html>
HTML
cat >"/etc/nginx/sites-available/\${DOMAIN}" <<NGINX
server {
listen 80;
listen [::]:80;
server_name \${DOMAIN};
root /var/www/\${DOMAIN}/html;
index index.html;
# LetsEncrypt(ACME)
location ^~ /.well-known/acme-challenge/ {
root /var/www/letsencrypt;
}
# 민감 파일 차단(실수 방지) - 필요시 조정
location ~ /\\.(?!well-known) {
return 404;
}
location / {
try_files \\$uri \\$uri/ =404;
}
}
NGINX
ln -sf "/etc/nginx/sites-available/\${DOMAIN}" "/etc/nginx/sites-enabled/\${DOMAIN}"
rm -f /etc/nginx/sites-enabled/default || true
nginx -t
systemctl reload nginx
certbot --nginx \\
-d "\${DOMAIN}" \\
--non-interactive \\
--agree-tos \\
-m "\${EMAIL}" \\
--redirect
certbot renew --dry-run
echo
echo "Done: https://\${DOMAIN}"
BASH
3) 단계별로 이해하기 (초보자용)
3-1) nginx 설치
sudo apt-get update -y
sudo apt-get install -y nginx
3-2) 정적 파일 준비
sudo mkdir -p /var/www/example.com/html
echo "hello" | sudo tee /var/www/example.com/html/index.html >/dev/null
3-3) nginx 사이트 설정
sudo tee /etc/nginx/sites-available/example.com >/dev/null <<'NGINX'
server {
listen 80;
server_name example.com;
root /var/www/example.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
NGINX
sudo ln -sf /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo nginx -t
sudo systemctl reload nginx
3-4) certbot으로 HTTPS 발급 + HTTP→HTTPS 리다이렉트
sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com --redirect
3-5) 자동 갱신 확인
sudo certbot renew --dry-run
4) 다음 단계(확장)
- Node API를 붙이고 싶다면:
nginx로 Node 서버 배포하기 (systemd + HTTPS) - 정적 사이트가 아니라 API/웹앱(Node 등)을 붙이고 싶다면:
nginx에서 한 도메인에 정적/API/WebSocket/서브앱 붙이기 - 보안 헤더를 기본값으로 깔고 싶다면:
nginx: 보안 헤더 기본 세트(CSP 포함) - “실수로 .env가 열리는 사고”를 막고 싶다면:
nginx: 민감 파일(.env/.git/백업) 차단
관련 용어: HSTS, Content-Security-Policy (CSP)