nginx로 정적 웹사이트 + HTTPS 구축하기 (Let’s Encrypt)

도메인 연결 → nginx 설치 → 사이트 설정 → certbot으로 SSL 발급/자동갱신까지, 초보자용 흐름 가이드

분야: DevOps/인프라 시리즈: Nginx nginxsslhttpsletsencryptcertbotdeploymentbeginner

정적 웹사이트(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) 다음 단계(확장)

관련 용어: HSTS, Content-Security-Policy (CSP)

관련 가이드