아파치 버추얼 호스트

출처 : http://hnsy.tistory.com/116
출처 : http://wiki.jinoos.com

하나의 머신에서 독립적이면서 다양한 웹서비스를 제공하는데 버추얼 호스트 라는 아파치의 기술이 적용된다. 아파치의 버추얼 호스트 개념과 종류 그리고 실제적인 세팅방법과 이용을 알아본다.

이 문서는 간단한 버추얼 호스트의 개념과 아파치를 이용한 버추얼 호스트 기능을 이용하는 방법에 관한 구체적인 문서다. 아파치에 관한 기본적인 지식이 있다는 가정하에서 작성되었으므로 아파치에 관한 기본적인 정보는 아파치 웹서버 공식사이트, Apache Korea Group 또는 kldp.org의 문서를 참고하기 바란다.

1 버추얼 호스트 #

1.1 개요 #
버추얼 호스트는 웹서버(여기선 Apache웹서버)로 웹서비스를 할때 하나의 머신에서 다중아이피 또는 다중 도메인으로 서비스를 할때 이용하는 기능이다.
버추얼 호스트는 MS의 IIS 웹서에서도 가상웹서버 라는 이름으로 설정이 가능 하지만 본인이 IIS와 별로 친하지 않은 관계로 Apache웹서버(이하:아파치)만을 기준으로 설명하겠다.

1.2 왜 필요한가? #
하 나의 서버 머신에 하나의 도메인으로만 서비스를 해야 한다면 머신의 자원을 어느정도 활용할수있는 사이트를 운영하는 머신은 상관 없지만 그렇지 않고 자원사용률이 턱없이 낮은 서버라면 이것은 분명 손해일수밖에 없다. 당신이 비싼돈 들여 5톤 트럭을 사서 매일 점심시간에 아들내미 점심 도식락이나 나르고 있다고 생각해 보자.-_-;

1.3 어디에 이용되는가? #
초 창기 버추얼 호스트는 몇몇의 회사나 대학교 등에서 시험적으로 같이 관리하는 도메인을 이용해서 하나의 머신에 몇개의 도메인을 함께 돌리는 형태로 이용되었다. 이때가 비로소 5톤 트럭을 가지고 아들내미 친구들 도시락까지 같이 날라다 주는 시대라고 할수 있겠다.
시 간이 흘러 많은 월드와이드웹이 선풍적인 인기를 끌고 그에 힘입어 웹사이트 없는 회사가 없고 홈페이지 안갖은 친구 없고, 심지어 쥐포 쇼핑몰까지 생겼을 만큼 많은 웹사이트들이 생기면서 가상호스트를 이용해서 하나의 머신에 적게는 1개부터 많게는 수백개의 도메인(엄밀히 말해서 수백개의 독립적인 사이트)이 돌아가는 웹 호스팅 이라는 서비스가 아마도 버추얼 호스트를 가장 다양하게 활용하는 분야가 아닌가 싶다. 바로 트럭으로 여러 학교의 수많은 학생들의 급식을 배달하는 식으로 이용하는 것이다.

2 아파치와 버추얼 호스트 #
HTTP 1.0 기본버전에서는 헤더에 아이피별로 도메인을 구분할 수 있는 어떠한 정보도 존재하지 않았지만 1.1 버전으로 넘어오면서 스팩의 변화로 아이피별 도에인 구분을 할수있는 정보를 제공하였다. 이에 발맞춰 아파치 1.1 버전에서 Non-IP Address-based 버추얼 호스트가 가능해졌고, 아파치 1.2 이상 버전에서 부터 비로소 다양한 버추얼 호스트가 가능해 졌다.

2.1 아파치 버추얼 호스트 종류 #
아파치는 다양한 방법으로 버추얼 호스트를 지원하고 있다.
Name-based : 도메인 네임을 기반으로 해서 도메인 네임별로 각각의 독립적인 웹사이트를 구성할때 이용된다.
IP-based : 다수의 이더넷카드, 또는 하나의 이더넷 카드에 다수의 IP가 부여된 머신에서 IP를 기반으로 각각의 독립적인 웹사이트를 구성할때 이용된다.
Mixed Name-/IP-based : 위 두 기능을 복합적으로 사용한다.
Port-based : 포트를 기반으로 각각의 독립적인 웹사이트를 구성할때 이용된다.

2.2 아파치 설정하기 #
기본적으로 아파치는 1.3 이상버전과 configure 파일 수정은 APACHE_ROOT/conf/httpd.conf 파일에서 수행한다. 설정 파일위치는 머신별로 다를수 있으니 각자 알맞은 파일을 편집하기 바란다.

2.2.1 Name-based 버추얼 호스트 #
Name-based 버추얼 호스트는 http://www.jinoos.com 이 서버의 기본 네임이고 new.jinoos.com 과 http://www.jinoos.co.kr이 Nameserver Zone파일에 alias된(CNAME) 네임일때 각각을 /home/jinoos/new와 /home/jinoos/cokr로 서비스를 할때 httpd 편집 파일은 아래와 같다.

Port 80
ServerName http://www.jinoos.com
NameVirtualHost *
DocumentRoot /home/jinoos/new
ServerName new.jinoos.com

DocumentRoot /home/jinoos/cokr
ServerName http://www.jinoos.co.kr

간단한 Name-based 형태의 버추얼 호스트 설정이다. 여기서 간과하지 말아야 할점은 버추얼 호스트 설정블럭(~)이 하나라도 존재할경우 설정되지 않은 다른 모든 도메인 네임에 관한 정보는 위에서 첫번째 버추얼 호스트 설정에 종속된다. new.jinoos.com 설정된 부분이 Default 설정으로 버추얼 호스트 첫번째 설정이 기본설정으로 적용되어 http://www.jinoos.com 으로 접근하면 new.jinoos.com 의 버추얼 호스팅 정보를 공유하게 되는것이다.
만 약 jinoos.co.kr 도메인의 하위 도메인인 sub.jinoos.co.kr 도메인의 aaa.sub.jinoos.co.kr, bbb.sub.jinoos.co.kr, ccc.sub.jinoos.co.kr 등의 도메인을 /home/jinoos/cokr로 http://www.jinoos.co.kr 과 같은 방식으로 한데 묶을때 아파치에서는 ?ServerAlias 라는 유용한 지시자를 제공 한다.

Port 80
ServerName http://www.jinoos.com
DocumentRoot /home/jinoos/www
NameVirtualHost *
DocumentRoot /home/jinoos/new
ServerName new.jinoos.com

DocumentRoot /home/jinoos/cokr
ServerName http://www.jinoos.co.kr
ServerAlias *.sub.jinoos.co.kr

2.2.2 IP-based 버추얼 호스트 #
위의 시스템에 이더넷카드를 추가하여 IP가 111.22.33.44와 111.22.33.55 두개로 구성되어있을 경우

Port 80
ServerName http://www.jinoos.com
DocumentRoot /home/jinoos/www
….
DocumentRoot /home/jinoos/new
ServerName new.jinoos.com

DocumentRoot /home/jinoos/cokr
ServerName http://www.jinoos.co.kr

위 와 같이 구성하여 111.22.33.44 로 요청된(실제는 네임 resolve IP 가 111.22.33.44 일때) 경우 new.jinoos.com 사이트로 접속, 111.22.33.55 로 요청된 경우 http://www.jinoos.co.kr 사이트로 접속되도록 처리된다. IP 별로 적절한 도메인에 대한 버추얼 호스팅을 수행하는것을 알수 있다.
다만 위의 예제는 한가지 문제 점이 있다. new.jinoos.com 도메인과 http://www.jinoos.co.kr 도메인이 모든 IP 에 대한 수행을 처리 하기 때문에 http://www.jinoos.com 도메인에 대한 경로가 사실상 존재하지 않는다. (단지 ‘localhost’로 요청을 했을경우에 만 http://www.jinoos.com으로 접속이 가능하다.)
이럴때 사용하는것이 Mixed Name-/IP-based 버추얼 호스트 방법이다.

2.2.3 Mixed Name-/IP-based 버추얼 호스트 #
IP-based 버추얼 호스트 #2.2.2 에서 제기된 문제를 해결해 보자.
일단 111.22.33.44 IP 에 http://www.jinoos.com 을, 111.22.33.55 IP 에 new.jinoos.com과 http://www.jinoos.co.kr 을 부여해서 작동하는 httpd.conf의 일부를 작성해보도록 하자.
111.22.33.44, 111.22.33.55 IP 에 각각 대응되는 도메인 네임은 각각 http://www.jinoos.com, new.jinoos.com 이다. 아래 코드는 이것을 기반으로 IP-based 버추얼 호스팅, http://www.jinoos.co.kr 은 Name-based 버추얼 호스팅 밥법을 사용한것이다.

Port 80
ServerName http://www.jinoos.com
DocumentRoot /home/jinoos/www
NameVirtualHost 111.22.33.44
DocumentRoot /home/jinoos/new
ServerName new.jinoos.com
DocumentRoot /home/jinoos/cokr
ServerName www.jinoos.co.kr

2.2.4 기타 #
아파치 에서는 위에서 열거된 방법 말고도 Port-based 버추얼 호스트 기법이 있습니다.
머 신상에 111.22.33.44 아이피는 http://www.jinoos.com 에 resolve 된다고 하고 같은 http://www.jinoos.com 의 8080포트로 접속시도(request)를 했을때 8080 의 ?DocumentRoot(/home/jinoos/8080)로 대응시키는 방법이다.

Listen 80
Listen 8080
ServerName http://www.jinoos.con
DocumentRoot /home/jinoos/www
DocumentRoot /home/jinoos/8080
이와 같은 방법은 SSL 서비스를 선택적으로 제공 할때도 유용하게 이용된다.

3 결론 #
지금까지 아파치를 이용한 버추얼 호스트에 대해서 집어 보았다. 아파치가 지금처럼 최강의 웹서버로 자리메김을 하는데에는 아파치 버추얼 호스트가 지대한 공언을 했다고 해도 크게 이의를 다는 사람은 없을것이다. 그만큼 아파치에서 버추얼 호스트는 아주 중요한 항목인것이다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: