티스토리 뷰

nginx/apache의 경우 Virtual Host 라는 기능이 제공된다. www.a.com, www.b.com 이 같은 ip이더라도 도메인만으로 다른 위치의 데이터를 전달할 수 있는 기능인데, 이것은 어떤 것이고, HTTP header 중에 어떤 정보를 이용하여 구현될까?

 

(배경지식) Virtual Host(가상 호스트)란?

 

> 웹서버에 기본적으로 존재하는 호스트를 주호스트(main host)라고 한다. 하나의 웹서버에 main host이외에 별도의 홈디렉토리를 가진 여러개의 호스트를 설정하여 운용할 수 있다. 이는 주로 웹호스팅 서비스에 사용되고, main host이외의 호스트들을 가상 호스트라고 부른다. (가상호스트를 가장 적절하게 이용하는 것이 웹호스팅 서비스) 이런 웹호스팅 서비스를 위해서는 아파치 웹서버에서는 가상호스트로 설정하면 해결가능하다.

 

> 가상 호스트의 종류

이름기반의 가상호스트(Name-based virtual host)


주소기반의 가상호스트(IP-based virtual host)


포트기반의 가상호스트(Port-based virtual host)


기본가상호스트(Default virtual host)


이 4가지 가상호스트 종류는 모드 하나의 물리적인 서버에서 운용되고 다수의 가상호스트를 운용한다는 것을 전제로 한다.

 

이름기반의 가상호스트는 하나의 IP Address에 여러개의 가상호스트를 운용하는 것


주소기반의 가상호스트는 가상호스트 각각에 하나씩의 IP Address를 할당하여 운용하는 것


포트기반의 가상호스트는 하나의 동일한 호스트에 포트만 다르게 지정하여 운용하는 것


기본가상호스트는 설정되어있는 어떤 호스트도 해당사항이 없는 호스트의 로딩요구를 받았을 때 기본으로 응답하게될 호스트를 지정하게 된다.


 

이름기반 가상호스트

 

과제에서의 요구사항은 같은 IP에서 다른 도메인의 서비스를 제공할 수 있는 이름기반의 가상호스트를 언급하는 것 같다.

 

이름기반 가상호스트의 경우 서버는 클라이언트가 HTTP 헤더로 **호스트명(Host)**을 알려주길 바란다.

 

이름기반 가상호스트는 [도메인을 IP로 변환해주는] DNS 서버가 각 호스트명이 올바른 IP 주소로 대응하도록 가상호스트를 설정하고, 다른 호스트명도 구별할 수 있도록 아파치 웹서버를 설정하기만 하면 된다.

 

 

이름기반 가상호스트 사용하기(아파치 기준)

 

> 이름기반 가상호스트를 사용하려면 서버는 연결을 받을 IP 주소(와 포트)를 정해야 한다. 이것은 NameVirtualHost 지시어로 가능하다. 여기서 지정한 IP 주소는 서버의 네트워크 인터페이스여야 한다.

 

> 그다음으로는 서비스하려는 호스트별로 VirtualHost 블록을 만들어야한다. VirtualHost 지시어의 argument는 NameVirtualHost의 것과 같아야한다. VirtualHost 블록에는 적어도 서비스를 할 호스트를 지정하는 ServerName 지시어와 호스트의 내용이 파일시스템 어디에 있는지를 지정하는 DocumentRoot지시어가 필요하다.

 

> 어떤 서버가 여러 이름으로 접속하기를 원한다면, VirtualHost 섹션안에 ServerAlias 지시어를 사용하여 가능하다.(이것을 하기전에 서버의 IP주소로 대응하도록 DNS 서버도 설정을 해야한다.)

 

> 전체적인 흐름으로는, 먼저 서버가 요청을 받으면 NameVirtualHost에서 지정한 IP주소인지 검사한다. 그럼 그 IP 주소를 가진 VirtualHost 섹션 목록에서 요청한 호스트명(From HTTP Host Header)과 일치하는 ServerName이나 ServerAlias를 찾는다. 이걸 찾으면 그 설정을 사용하고, 알맞은 가상호스트를 찾지못하면 IP 주소에 해당하는 가상호스트들중 첫번쨰 것을 사용한다.

> 결과적으로는 처음에 나온 가상호스트가 기본 가상호스트가 된다. IP 주소가 NameVirtualHost 지시어에 해당하면 주서버의 DocumentRoot는 절대 사용하지 않는다.

 

---

 

참고: https://httpd.apache.org/docs/trunk/ko/vhosts/name-based.html


 



댓글
댓글쓰기 폼
공지사항
Total
93,641
Today
5
Yesterday
8
«   2019/06   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
글 보관함