Skip to content
VDS · 시작하기

빠른 시작: 15분 만에 웹사이트 만들기

깨끗한 머신에서 HTTPS 인증서가 있는 작동하는 nginx 사이트까지 알아봐요. 설치, 사이트 디렉터리, 도메인, 방화벽, 확인을 다뤄요.

업데이트 2026년 8월 23일

시나리오: 새로 설치한 Debian 또는 Ubuntu, 본인의 도메인, 그리고 HTTPS로 페이지를 여는 것이 목표입니다. 모든 명령은 SSH를 통해 root로 실행합니다.

1. nginx 설치

apt update && apt install -y nginx
systemctl enable --now nginx

브라우저에서 http://your-address를 열어 보세요. 환영 페이지가 보일 것입니다. 보이지 않는다면 방화벽을 확인하세요(3단계).

AlmaLinux에서는 apt 대신 dnf를 사용하세요. 자세한 내용은 AlmaLinux를 참고하세요.

2. 도메인 연결

등록기관 패널에서 "Overview" 탭에 있는 머신 주소로 A 레코드를 추가하세요:

example.com.      A     203.0.113.10
www.example.com.  A     203.0.113.10

도메인이 올바른 주소로 확인되는지 검사하세요:

apt install -y dnsutils
dig +short example.com

레코드 갱신에는 1분에서 몇 시간까지 걸릴 수 있어요. dig가 이전 주소를 반환하는 동안에는 인증서를 발급할 수 없어요.

3. 포트 열기

apt install -y ufw
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

먼저 allow OpenSSH를 실행하고, 그다음 enable을 실행하세요. 순서를 바꾸면 접속이 끊겨서 텍스트 콘솔로 로그인해야 해요.

4. 사이트 만들기

mkdir -p /var/www/example.com
echo '<h1>Works</h1>' > /var/www/example.com/index.html
chown -R www-data:www-data /var/www/example.com

/etc/nginx/sites-available/example.com의 설정:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

활성화하고 적용하세요:

ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

nginx -t는 필수예요. 재시작 전에 설정을 검사하거든요. 출력이 syntax is ok와 test is successful로 끝나지 않는다면 서비스를 재시작하지 말고 먼저 오류를 고치세요.

5. 인증서 발급

apt install -y certbot python3-certbot-nginx
certbot --nginx -d example.com -d www.example.com

Certbot이 이메일을 묻고, listen 443 ssl 블록을 추가하고, HTTP 리다이렉트를 설정해요. 갱신은 자동으로 설정되며, 다음과 같이 확인할 수 있어요:

certbot renew --dry-run

가장 자주 발생하는 문제

증상원인
브라우저에서 사이트가 열리지 않음ufw에서 포트 80 또는 443이 닫혀 있음
Certbot: Timeout during connect도메인이 아직 머신을 가리키지 않거나 포트 80이 닫혀 있음
502 Bad Gatewaynginx가 실행 중이 아닌 애플리케이션으로 프록시하고 있음 — 해당 서비스의 systemctl status를 확인하세요
403 Forbidden디렉터리에 권한이 없거나 index.html이 없음
본인 페이지 대신 기본 nginx 페이지가 표시됨/etc/nginx/sites-enabled/default가 삭제되지 않음

이러한 문제에 대한 로그:

tail -n 50 /var/log/nginx/error.log
journalctl -u nginx -n 50 --no-pager

다음으로, 아직 하지 않았다면 첫 시간 체크리스트를 참고해 기본 보안을 챙기세요.