상세 컨텐츠

본문 제목

DNS를 이용한, 개인 호스트 이름을 부여하는 개인 홈페이지 서비스

프로그래밍/시스템, 서버구축

by 라제폰 2009. 1. 5. 12:59

본문


- 동작하는 모습

개인 홈페이지를 지원하는 수많은 사이트가 있다. 하나루통신? 맥아패스?, 내띠앙?
등등.. :) 이런 사이트에서 자신의 홈은 대개 아래의 주소 형식을 갖는다.

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/ 처럼 보이게
할 수 있는 것이다.

관련글 더보기