티스토리 뷰
웹서버의 이름기반 가상 호스트(Name-based Virtual Host of Web Server like Apache/nginx)
DevES 2016. 9. 12. 19:56
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
'Web' 카테고리의 다른 글
- Total
- Today
- Yesterday
- linux
- lood
- logging
- JVM
- log level
- TaskExecutor
- log
- logback
- Apache
- webserver
- slf4j
- NGINX
- object
- runtime data areas
- java
- good practice
- logging facade
- Spring
- async
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |