하나의 서버에서 여러 사이트 운영하기
하나의 VPS에서 여러 사이트를 호스팅하는 방법을 다뤄요. 디렉터리 구조, 분리된 설정과 사용자, 공유 인증서, 그리고 티어별 부하 추정을 설명해요.
업데이트 2026년 8월 23일
하나의 공인 IPv4 주소로 여러 도메인을 운영할 수 있어요. 웹 서버가 Host 헤더를 기준으로 요청을 라우팅하기 때문이에요. 한계는 주소 개수가 아니라 여러분이 사용하는 티어의 메모리와 디스크예요.
레이아웃
템플릿은 하나로 유지하세요. 그렇지 않으면 6개월 뒤에 어느 사이트가 누구 것인지 구분할 수 없게 돼요:
/var/www/example.ru/public
/var/www/example.ru/logs
/var/www/shop.ru/public
/var/www/shop.ru/logs
사이트마다 별도의 설정 파일을 두세요: /etc/nginx/sites-available/<domain>, 그리고 sites-enabled의 심볼릭 링크로 활성화해요. 이렇게 하면 사이트를 비활성화할 때 공용 파일에서 알맞은 부분을 찾아 헤맬 필요 없이 심볼릭 링크 하나를 삭제하고 리로드하면 돼요.
설정
server {
listen 80;
server_name example.ru www.example.ru;
root /var/www/example.ru/public;
index index.html index.php;
access_log /var/www/example.ru/logs/access.log;
}
알 수 없는 도메인을 위한 “catch-all 사이트”도 설정하세요. 그렇지 않으면 여러분의 주소를 가리키는 제삼자 도메인에 대해 사전순으로 첫 번째 설정이 열리게 돼요:
server {
listen 80 default_server;
server_name _;
return 444;
}
권한 분리
사이트가 서로 다른 고객이나 서로 다른 프로젝트에 속한다면, 이들에게 공용 사용자를 부여하지 마세요. 그렇지 않으면 스크립트 하나의 취약점이 모든 사이트에 대한 접근 권한을 의미하게 돼요.
useradd -r -d /var/www/example.ru -s /usr/sbin/nologin site-example
chown -R site-example:www-data /var/www/example.ru
chmod 750 /var/www/example.ru
PHP의 경우 사이트마다 자체 user와 listen을 가진 별도의 FPM 풀을 만드세요. 자세한 내용은 PHP-FPM을 참고하세요. 데이터베이스도 분리하세요: 사용자와 권한.
인증서
certbot을 한 번 실행하면 여러 도메인을 한꺼번에 처리할 수 있어요:
certbot --nginx -d example.ru -d www.example.ru -d shop.ru -d www.shop.ru
갱신은 공유되며 타이머 하나로 처리돼요. 자세한 내용은 Let's Encrypt를 참고하세요.
사이트가 몇 개나 들어갈까
도메인 개수가 아니라 메모리로 계산하세요. 정적 사이트는 거의 비용이 들지 않아요. 데이터베이스가 있는 CMS 사이트는 수백 메가바이트를 차지해요.
| 티어 | 메모리 | 기준 |
|---|---|---|
| VDS-1 (2 GB) | 2 GB | CMS 사이트 1–2개 또는 정적 사이트 십여 개 |
| VDS-2 (4 GB) | 4 GB | CMS 사이트 3–5개 |
| VDS-3 (8 GB) | 8 GB | CMS 사이트 8–12개 |
디스크도 한정되어 있어요: VDS-1은 40 GB, VDS-6은 250 GB예요. 요금제는 남은 유료 기간의 차액을 지불하고 업그레이드만 할 수 있어요.
흔한 실수
| 증상 | 원인 |
|---|---|
| 모든 도메인이 같은 사이트를 표시함 | server_name이 일치하지 않아 첫 번째 블록이 요청을 처리함 |
| 모든 사이트의 로그가 한 파일에 기록됨 | 사이트 블록에 access_log가 설정되지 않음 |
| 사이트 하나가 전체를 다운시킴 | 제한 없는 공용 PHP-FPM 풀 |
| 디스크 공간 부족 | 로그와 백업이 같은 디스크에 있음 — logrotate를 설정하세요 |
새 사이트를 추가하기 전에
/hosting/vds/m/<id>의 제어판 “개요”에서 지난주 메모리 그래프를 확인하세요. 최고치가 이미 한계에 도달했다면, 새 사이트는 크래시의 원인이지 결과가 아니에요.