- 동작하는 모습
개인 홈페이지를 지원하는 수많은 사이트가 있다. 하나루통신? 맥아패스?, 내띠앙?
등등.. :) 이런 사이트에서 자신의 홈은 대개 아래의 주소 형식을 갖는다.
http://myhome.webserver.com/~cybaek/
당연한 것이지만, 만일 아래와 같은 주소를 제공한다면 사용자들은 더욱 서비스에
만족할 것이다.
http://cybaek.myhome.webserver.com/
- 셋팅에서의 문제
DNS 서버에 cybaek.myhome.webserver.com 은 IP가 10.1.2.3 인 것을 등록해 주면
간단하지만, 사용자가 100만이라면 이 많은 사용자별 IP정보를 DNS 영역(Zone)
파일에 담을 수가 없다.
DNS에서 호스트 이름을 *로, IP를 등록하면, 등록 안된 IP는 *에서 지정한
IP로 반환된다. 이 속성을 이용하면 anybody.myhome.webserver.com 에 대해서
일정한 IP를 반환하도록 설정이 가능하다.
그런데, Windows2000의 DNS는 GUI 관리자 인터페이스로는 *를 추가할 수가 없다.
따라서, 편집기를 이용하여 직접 영역 파일을 수정해야한다.
영역 파일은 c:\winnt\system32\dns\ 에 있다.
- 프로그래밍을 이용한 해결
HTTP1.0 스펙만을 지원하는 브라우저와 웹 서버라면 대책이 없지만, HTTP1.1의
HOST 헤더를 지원한다면 아주 쉽게 해결이 된다.
HTTP1.1을 따르는 브라우저의 경우, 해당 웹사이트를 접속할 때 HOST 헤더를
함께 전송한다. 예를 들어, cybaek.myhome.webserver.com 을 접근한다고 하면,
아래와 같은 정보를 서버에 전송하게 된다.
GET /
Host: cybaek.myhome.webserver.com
7903.myhome.webserver.com 으로 접속할 때는,
GET /
Host: 7903.myhome.webserver.com
과 같다. 물론 두 호스트, cybaek과 7903은 같은 IP이다. 그런데, 같은 서버에
접속을 해도 서버에게 주는 정보 중 Host 부분은 다르다. 그래서, 웹 서버는
같은 서버 IP로 들어온 요청을 구분할 수가 있는 것이다.
그리고, 이 Host의 값이 환경변수 HTTP_HOST에 있기 때문에 ASP에서
Request.ServerVariables("HTTP_HOST")를 통해서 접근이 가능하다.
아래의 코드는 HTTP_HOST값에 따라, 해당 사용자의 홈페이지를 표시해주는 보기이다.
<%
Option Explicit
Dim strHostName, vUserID, strHome
strHostName = Request.ServerVariables("HTTP_HOST")
vUserID = split(strHostName, ".")
strHome = "http://myhome.webserver.com/~" & vUserID(0) & "/"
%>
<frameset rows="0,*" frameborder=0 border=0>
<frame src="">
<frame src="<%=strHome%>" rows="0,*">
</frameset>
이 짧은 코드로 내부적으로는 http://myhome.webserver.com/~cybaek/ 인
홈페이지를 겉으로는 http://cybaek.myhome.webserver.com/ 처럼 보이게
할 수 있는 것이다.
|