가상 호스팅

**가상 호스팅** 또는 **버추얼 호스팅**()은 하나의 서버(또는 서버 풀)에 여러 개의 도메인 이름(각 이름을 별도 관리)을 호스팅하는 방식을 말한다. 이를 통해 한 서버는 메모리, 프로세서 사이클 등 자신의 자원을 공유할 수 있으며 동일한 호스트명을 사용하기 위해 제공되는 모든 서비스가 필요하지 않다. 가상 호스팅이라는 용어는 웹 서버의 참조로 보통 사용되지만 원칙적으로는 다른 인터넷 서비스에도 적용된다.

널리 쓰이는 분야의 하나로 공유 웹 호스팅이 있다. 공유 웹 호스팅의 가격은 전용 웹 서버보다 낮은 편인데 그 이유는 수많은 고객이 하나의 서버에서 호스팅될 수 있기 때문이다. 동일한 머신에 여러 이름을 사용하려는 일은 매우 흔한 편이다.

2가지 종류의 가상 호스팅이 있다: 이름 기반, IP 기반. 이름 기반 가상 호스팅은 클라이언트에 의해 대표되는 호스트명을 사용한다. 이를 통해 IP 주소, 그리고 이와 연결된 관리 부하를 절약해주지만 서비스되는 프로토콜은 적절한 지점에서 호스트명을 제공해야 한다. 특히 SSL/TLS로 이름 기반 가상 호스팅을 사용하는 일은 매우 난해한 편이다. IP 기반 가상 호스팅은 각 호스트명별로 별도의 IP 주소를 사용하며 어떠한 프로토콜이 와도 수행이 가능하지만 서비스되는 도메인명마다 전용 IP 주소가 필요하다. 포트 기반 가상 호스팅 또한 원칙적으로 가능하지만 사용자에게 친숙하지 않은 이유로 거의 쓰이지 않는 편이다.

이름 기반 및 IP 기반 가상 호스팅을 결합할 수 있다. 서버는 여러 개의 IP 주소를 가질 수 있으며, 그중 일부 또는 모든 IP 주소에서 여러 이름을 서비스할 수 있다. 이 기술은 와일드카드 인증서와 함께 SSL/TLS를 사용할 때 유용할 수 있다. 예를 들어, 서버 운영자가 *.example.com용과 *.example.net용으로 두 개의 인증서를 가지고 있다면, foo.example.com과 bar.example.com은 동일한 IP 주소에서 서비스할 수 있지만, baz.example.net을 위해서는 별도의 IP 주소가 필요하다.

## 이름 기반
이름 기반 가상 호스트는 동일한 IP 주소에 대해 여러 호스트 이름을 사용한다.

이름 기반 가상 호스트를 위해 필요한 기술적 전제 조건은 요청에 대상 호스트 이름을 포함할 수 있는 HTTP/1.1 지원(오늘날 일반적임) 웹 브라우저이다. 이를 통해 하나의 IP 주소 뒤에 여러 사이트를 호스팅하는 서버가 올바른 사이트의 콘텐츠를 전달할 수 있다. 구체적으로는 HTTP/1.1에서 필수적인  HTTP 헤더를 설정하는 것을 의미한다.

예를 들어, 서버가 과 이라는 두 도메인에 대한 요청을 받을 수 있으며, 두 도메인 모두 동일한 IP 주소로 분해된다. 의 경우 서버는  디렉터리의 HTML 파일을 전송하고, 에 대한 요청은 서버가 의 페이지를 서비스하게 한다. 마찬가지로 동일한 도메인의 두 서브도메인을 함께 호스팅할 수 있다. 예를 들어, 블로그 서버가 blog1.example.com과 blog2.example.com을 모두 호스팅할 수 있다.

이름 기반 가상 호스팅의 가장 큰 문제는 SSL/TLS를 실행하는 여러 보안 웹사이트를 호스팅하기 어렵다는 점이다. SSL/TLS 핸드셰이크가 예상되는 호스트 이름이 서버로 전송되기 전에 발생하기 때문에, 서버는 핸드셰이크 중에 어떤 인증서를 제시해야 할지 알 수 없다. "subjectaltname" 필드나 와일드카드를 통해 단일 인증서가 여러 이름을 포함하도록 할 수 있지만, 이 방법의 실제 적용은 관리적 고려 사항과 와일드카드 일치 규칙에 의해 제한된다. 이 문제를 우회하기 위해 핸드셰이크 시작 부분에 이름을 제시하는 서버 네임 인디케이션(SNI)이라는 TLS 확장 기능이 있지만, 일부 오래된 클라이언트(특히 윈도우 XP의 인터넷 익스플로러 또는 오래된 안드로이드 버전)는 이를 구현하지 않는다.

또한, 도메인 네임 시스템(DNS)이 제대로 작동하지 않으면 IP 주소를 알고 있더라도 가상 호스팅된 웹사이트에 접근하기 어렵다. 사용자가 와 같이 시스템에 접속하기 위해 IP 주소 사용으로 되돌아가려고 하면, 웹 브라우저는 IP 주소를 호스트 이름으로 전송한다. 웹 서버는 웹 브라우저 클라이언트가 어떤 서버 이름(가상 호스트)을 사용할지 알려주는 것에 의존하기 때문에, 서버는 기본 웹사이트로 응답하게 되며 이는 종종 사용자가 기대하는 사이트가 아니다.

이 경우 해결 방법은 클라이언트 시스템의 hosts 파일에 IP 주소와 호스트 이름을 추가하는 것이다. 도메인 이름으로 서버에 접속하는 것이 다시 작동하게 된다. 그러나 호스트 이름과 IP 주소 사이의 실제 매핑이 변경되면 로컬 설정이 우선되므로 사용자는 이 작업을 수행할 때 주의해야 한다. 이 해결 방법은 일반적인 웹 사용자에게는 실제로 유용하지 않지만, DNS 레코드를 수정하는 동안 사이트 관리자에게는 유용할 수 있다.

## IP 기반
IP 기반 가상 호스팅을 사용하면 각 사이트(DNS 호스트 이름 또는 동일하게 작동하는 DNS 호스트 이름 그룹)가 고유한 IP 주소를 가리킨다. 웹 서버는 여러 개의 물리적 네트워크 인터페이스, 동일한 물리적 인터페이스 상의 가상 네트워크 인터페이스 또는 하나의 인터페이스에 여러 개의 IP 주소가 구성된다. 웹 서버는 각 IP 주소에 대해 별도의 리스닝 소켓을 열거나, 단일 소켓으로 모든 인터페이스에서 리스닝하고 연결을 수락한 후 TCP 연결이 수신된 IP 주소를 얻을 수 있다. 어느 쪽이든 IP 주소를 사용하여 어떤 웹사이트를 서비스할지 결정할 수 있다. 클라이언트는 이 프로세스에 관여하지 않으므로(이름 기반 가상 호스팅과 달리) 호환성 문제가 없다.

이 방식의 단점은 서버가 모든 웹사이트마다 서로 다른 IP 주소를 필요로 한다는 점이다. 이는 관리 오버헤드(서버에 주소를 할당하고 인터넷 등록 기관에 해당 주소 사용의 정당성을 증명하는 일 모두)를 증가시키고 IPv4 주소 고갈의 원인이 된다.

## 용도
가상 웹 호스팅은 고객에게 저렴한 비용으로 웹사이트 호스팅을 제공하는 비즈니스 모델을 가진 기업에서 대규모로 자주 사용된다. 전 세계 웹 호스팅 서비스 고객 웹사이트의 대다수는 가상 호스팅 기술을 사용하여 공유 서버에서 호스팅된다.

많은 기업이 고객 엑스트라넷 웹사이트, 직원 엑스트라넷, 내부 인트라넷, 부서별 인트라넷 등 여러 개의 별도 웹사이트를 운영해야 하는 기술적 또는 관리적 이유가 있는 경우 내부적인 목적으로 가상 서버를 활용한다. 웹사이트 아키텍처에 보안 문제가 없다면 가상 호스팅 기술을 사용하여 단일 서버로 통합할 수 있으며, 이를 통해 관리 및 관리 오버헤드와 비즈니스를 지원하는 데 필요한 별도 서버의 수를 줄일 수 있다.

## 같이 보기
* 가상 사설 서버
* 서버 네임 인디케이션

## 각주

## 외부 링크
* Apache Virtual Host Documentation
* Which ports are considered unsafe on Chrome

분류:웹 호스팅