이 문서는 이름기반 가상호스트를 사용하는 경우와 방법을 설명한다.
IP기반 가상호스트는 연결한 IP 주소를 가지고 서비스할 가상호스트를 결정한다. 그래서 각 호스트는 서로 다른 IP 주소를 가져야 한다. 이름기반 가상호스트의 경우 서버는 클라이언트가 HTTP 헤더로 호스트명을 알려주길 바란다. 이런 방법으로 한 IP 주소로 여러 다른 호스트를 서비스할 수 있다.
이름기반 가상호스트는 DNS 서버가 각 호스트명이 올바른 IP 주소로 대응하도록 가상호스트를 설정하고, 다른 호스트명을 구별할 수 있도록 아파치 웹서버를 설정하기만 하면되므로 더 간단하다. 이름기반 가상호스트는 또 여러 IP 주소가 필요없다. 그러므로 특별히 IP기반 가상호스트를 선택할 이유가 없다면 이름기반 가상호스트를 사용해야 한다. IP기반 가상호스트를 사용해야할 이유로는:
이름기반 가상호스트를 사용하려면 서버는 연결을 받을
IP 주소를 (아마 포트도) 정해야 한다. 이는 *를 사용한다. 여러 포트를 사용할
(예를 들어, SSL을 사용할) 계획이라면 *:80과
같이 아규먼트에 포트를 추가해야 한다.
다음 단계는 서비스하려는 호스트별로 *)와
같아야 한다.
기존에 사용하던 웹서버에 가상호스트를 추가한다면
기존에 사용하던 호스트에 대한
예를 들어 www.domain.tld 도메인을 서비스하고
있었는데 같은 IP 주소에
www.otherdomain.tld란 가상호스트를 추가하고
싶다고 가정하자. httpd.conf에 다음과 같이
추가하면 된다:
* 대신 직접 IP 주소를 지정할
수도 있다. 예를 들어, 이런식으로 한 IP 주소에 여러 이름기반
가상호스트들을 돌리고, 다른 주소에 IP기반 혹은 이름기반
가상호스트들을 돌릴 수 있다.
어떤 서버는 여러 이름으로 접속할 수 있길 바란다. 이는
domain.tld 도메인에 있는 모든 호스트에 대한
요청을 www.domain.tld 가상호스트가 서비스한다.
이름을 줄때 와일드카드 문자 *와 ?를
사용할 수 있다. 물론 ServerAlias에
이름을 적어주었다고 끝이 아니다. 먼저 이 이름들이 서버의
IP 주소로 대응하도록 DNS 서버를 알맞게 설정해야 한다.
마지막으로
요청을 받으면 서버는 먼저 ServerAlias를 찾는다. 찾으면 그 설정을 사용한다.
적절한 가상호스트를 찾지못하면, IP 주소에 해당하는
가상호스트들중 첫번째 것을 사용한다.
결과적으로 처음에 나온 가상호스트가 기본
가상호스트가 된다. IP 주소가
이미 적었듯이 이름기반 가상호스트가 올바로 동작하기위해 필요한 정보를 보내지않는 클라이언트가 있다. 이런 클라이언트는 항상 요청한 IP 주소에 대해 첫번째로 나오는 가상호스트 (최초의 이름기반 가상호스트)가 서비스한다.
여기서 오래되었음은 실제로 상당히 오래된 것을 뜻한다.
오늘날 이런 브라우저를 사용할 일은 거의없다. 요즘
브라우저는 모두 이름기반 가상호스트에 필요한 Host
헤더를 보낸다.
이 문제는 약간 거추장스럽지만
설정 예:
이게 무슨 뜻인가? "/domain"로 시작하는
URI에 대한 요청은 가상호스트 www.domain.tld가
서비스한다. 즉, Host: 헤더를 보내는 클라이언트는
http://www.domain.tld/만으로도 접근할 수 있지만,
http://www.domain.tld/domain/으로는 모든
클라이언트가 페이지에 접근할 수 있다.
이를 위해 최초의 가상호스트에 있는 페이지에
http://www.domain.tld/domain/으로 가는 링크를
넣는다. 그리고 가상호스트 페이지에서는 상대링크 (예를 들어,
"file.html" 이나 "../icons/image.gif")
혹은 ("http://www.domain.tld/domain/misc/file.html"이나
"/domain/misc/file.html"과 같이) 앞에
/domain/이 붙은 링크만을 사용한다.
조금 규칙이 필요하지만 이 규칙을 따르면 대부분의 경우 요즘 것이나 오래된 것이나 관계없이 모든 브라우저로 페이지를 볼 수 있다.