빠른 시작: 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 Gateway | nginx가 실행 중이 아닌 애플리케이션으로 프록시하고 있음 — 해당 서비스의 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
다음으로, 아직 하지 않았다면 첫 시간 체크리스트를 참고해 기본 보안을 챙기세요.