어플리케이션

Apache 에서 사용되는 Virtual Host(가상 호스트) 에 대해 알아보겠습니다.

forward error correction Circle 2025. 10. 22. 08:18
반응형

Ⅰ. 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 인증서 개별 적용 가능!

반응형