Apache 에서 사용되는 Virtual Host(가상 호스트) 에 대해 알아보겠습니다.
Ⅰ. Virtual Host(가상 호스트) 란?
하나의 Apache 웹 서버 프로세스에서 여러 웹사이트(도메인 또는 포트)를 동시에 서비스하기 위한 설정 기능입니다.
물리 서버는 하나지만, 여러 도메인(www.example.com, api.example.com, test. example.com 등)을 각각 독립된 사이트처럼 서비스할 수 있습니다.
Ⅱ. Virtual Host(가상 호스트) 목적
Virtual Host는 물리적으로 한 대의 서버에서 여러 도메인 또는 사이트를 동시에 운영할 수 있게 만들어주는 Apache 웹서버의 기능입니다.
ⅰ. 비용 절감: 서버 한 대로 수십~수백개의 사이트 운영 가능
ⅱ. 관리 효율: 사이트별로 설정, 로그, 보안 정책을 개별 적용
ⅲ. 활용 사례: aaa.com: 메인 회사 홈페이지
bbb.com: 쇼핑몰 서비스
ccc.com: 블로그 플랫폼
이전에는 각각의 사이트마다 물리적인 서버가 필요했지만, Virtual Host 덕분에 하나의 서버에 여러 웹서비스를 올릴 수 있습니다.
Ⅲ. Virtual Host(가상 호스트) 동작 원리
ⅰ. 요청의 Host 헤더로 적절한 사이트에 연결
ⅱ. 웹 브라우저가 서버에 접속할 때 요청 헤더에 Host 값(도메인, IP, 포트)가 포함됩니다.
ⅲ. Apache는 이 Host 정보를 기준으로 각 사이트(VirtualHost 블록)에 요청을 전달합니다.
1) 사용자 브라우저: http://www.example.com 접속
2) Host: http://www.example.com
3) Apache는 ServerName이 http://www.example.com인 블록에서 설정을 읽어서 해당 서비스 응답
ⅳ. 서버가 "누가 접속했는지"를 Host 헤더로 파악해서 각 사이트로 트래픽을 분배하는 구조입니다.
Ⅳ. Virtual Host(가상 호스트) 구분 방식 (세 가지 Virtual Host Type)
| 종류 | 원리 | 장점 | 제한/상황 | 예시 |
| Name-based | 요청 Host(도메인) 기준 | 가장 일반적 | 대부분의 환경에서 사용 | site1.com, site2.com |
| IP-based | 서버의 IP 주소 기준 | 여러 공인 IP 사용 가능 | IP 부족할 때는 불리 | 192.168.1.10, 192.168.1.11 |
| Port-based | 포트 번호 기준 | 개발/테스트 환경에 유용 | 일반 사용에는 불편 | :80, :8080 |
Ⅴ. Virtual Host(가상 호스트) 실제 설정 위치
ⅰ. CentOS/RHEL/Rocky
| 메인 설정: /etc/httpd/conf/httpd.conf 개별 가상호스트: /etc/httpd/conf.d/*.conf 혹은 /etc/httpd/sites-available/, /etc/httpd/sites-enabled/ |
ⅱ. Ubuntu/Debian
| 메인 설정: /etc/apache2/apache2.conf 개별 가상호스트: /etc/apache2/sites-available/ (설정 파일 저장) /etc/apache2/sites-enabled/ (적용되는 링크) 실제 적용은 sites-available에서 .conf 파일 작성 → a2ensite로 사용 설정 → sites-enabled에 심볼릭링크 생성 |
Ⅵ. Virtual Host(가상 호스트) 핵심 구성 지시어(Directive)
| 지시어 | 역할 | 예시 | 상세 설명 |
| ServerName | 주도메인 지정 | http://www.example.com | 요청 Host와 매칭되는 대표 주소 |
| ServerAlias | 추가 도메인명 지정 | example.com, *.example.com | 여러 도메인, 서브도메인 함께 서비스 |
| DocumentRoot | 웹 파일 경로 | /var/www/example | 해당 사이트의 실제 파일 위치 |
| Directory | 접근 권한 등 설정 | <Directory /var/www/example> | 파일·폴더의 접근권한, 오버라이드 등 |
| ErrorLog/CustomLog | 로그 위치 지정 | /var/log/httpd/example-error.log | 사이트별로 별도 로그 보관 |
Ⅵ. Virtual Host(가상 호스트) 설정 예시
ⅰ. Name-based : 한 서버(IP)에서 여러 도메인 운영
| Listen 80 <VirtualHost *:80> ServerName http://www.site1.com DocumentRoot /var/www/site1 </VirtualHost> <VirtualHost *:80> ServerName http://www.site2.com DocumentRoot /var/www/site2 </VirtualHost> |
ⅱ. IP-based : IP별로 각각 서비스
| Listen 80 <VirtualHost 192.168.1.100:80> ServerName http://www.site1.com DocumentRoot /var/www/site1 </VirtualHost> <VirtualHost 192.168.1.101:80> ServerName http://www.site2.com DocumentRoot /var/www/site2 </VirtualHost> |
ⅲ. Port-based : IP 주소에서 포트 번호(예: 80, 8080 등)로 웹사이트를 구분
| Listen 80 Listen 8080 <VirtualHost *:80> ServerName http://www.port80.com DocumentRoot /var/www/port80 </VirtualHost> <VirtualHost *:8080> ServerName http://www.port8080.com DocumentRoot /var/www/port8080 </VirtualHost> |
Ⅶ. Virtual Host(가상 호스트) 활성화 및 관리
ⅰ. CentOS/RHEL 계열
| conf 파일 작성 후 /etc/httpd/conf.d/에 저장 적용: sudo systemctl reload httpd 사이트별로 conf 작성, 필요에 따라 활성화/비활성화 및 서비스 reload가 기본 관리 프로세스 |
ⅱ. Ubuntu/Debian 계열
| 사이트 활성화: sudo a2ensite example.conf 사이트 비활성화: sudo a2dissite example.conf 설정 적용(재시작): sudo systemctl reload apache2 |
Ⅷ. Virtual Host(가상 호스트) SSL(https) 적용
| <VirtualHost *:443> ServerName www.site1.com SSLEngine on SSLCertificateFile /etc/ssl/certs/example.crt SSLCertificateKeyFile /etc/ssl/private/example.key DocumentRoot /var/www/example <Directory /var/www/example> AllowOverride All Require all granted </Directory> </VirtualHost> |
Ⅸ. Virtual Host(가상 호스트) 운영 효과
ⅰ. 서버 자원 효율화: 한 서버에서 여러 사이트를 공유하므로 하드웨어·관리비 절감
ⅱ. 사이트별 독립 관리: 각각의 웹사이트별로 독립적인 설정(SSL, 권한, 로그, 오버라이드 등) 적용 가능
ⅲ. 장애 대응: 특정 사이트에 장애 발생 시, 다른 사이트 영향 최소화
ⅳ. 실무 활용
1) 웹호스팅 업체는 수백~수천 사이트를 단일 서버로 운영
2) 사내 개발팀은 운영/테스트/개발 환경을 한 서버로 빠르게 전환
3) 사이트별 트래픽 통계, 보안 정책, SSL 인증서 개별 적용 가능!