IIS 를 이용한 다중 웹사이트 호스팅
IIS를 이용한 다중 웹사이트 호스팅
(1) 복수 IP Address 할당 |
많이 사용하고 흔히들 생각하는 기능이다. Windows2000서버가 제공하는 IIS서버 하나를 가지고 여러 회사의 웹사이트를 호스팅 하고 싶은데?... IIS가 제공하는 기능을 통해서 다중웹사이트를 호스팅하는 방법을 정리하고자 한다. 설명보다는 한가지 예제를 통해서 처음부터 마지막까지 구현하는 것으로 마치도록 할 것이다. 차분히 읽어보면 기능을 익힐 수 있을 것이라 생각한다.
예제로 쓰일 시나리오를 잠깐 설명한다. A라고 하는 회사는 mcpworld.net 이라는 도메인을 등록해서 웹서비스를 하고 있다. 최근에 insidesql.net 과 dotnetkorea.org 라는 도메인을 추가로 등록해서 각각 회사의 홍보역할을 하는 사이트를 구축하였다. 홍보역할 정도여서 크게 성능을 요구하는 것이 아닌만큼, 기존에 mcpworld.net을 호스팅하는 웹서버에 추가로 2개의 도메인을 더 셋팅하고자 한다. 어떤 방법을 사용해야 할까?
(1)복수 IP Address 할당 (각 사이트마다 다른 IP사용)
첫 번째 쉽게 고려할 수 있는 방법은 사이트마다 서로 다른 IP Address를 사용하는 방법이다. 서로 다른 IP를 쓰는 방법은 2가지가 있다. 필요한 개수만큼 Network Adapter card를 추가하고 각각 IP Address를 할당할 수도 있고, 하나의 Network Adapter card에 여러 개의 IP Address를 할당할 수도 있다. 후자의 예를 들어서 설명하도록 한다. DNS에서 먼저 www 레코드의 설정이 따라야 할 것이다. <화면1>에서는 세 개의 도메인에 대한 Name Service를 수행하는 blueapple이라는 이름의 서버의 DNS관리콘솔을 캡춰하였다.
< 화면1. DNS 관리콘솔>
예제의 상황은 다음과 같다.
www.mcpworld.net -> 192.168.10.1
www.insidesql.net -> 192.168.10.2
www.dotnetkorea.org -> 192.168.10.3
하나의 네트워크 어댑터 카드에 위에서 필요한 3개의 IP Address를 할당해야 한다. 네트워크 및 전화접속연결을 통해서 TCP/IP 등록정보를 연 다음, [고급]버튼을 눌러서 [IP설정]탭으로 접근한다. [추가]버튼을 이용하여 <화면2>의 예제처럼 필요한 IP Address를 추가한다. 예제에서는 기본 IP Address인 192.168.10.1 외에 192.168.10.2와 192.168.10.3 의 IP Address를 추가하였다.
<화면2.하나의 Network Adapter card에 복수의 IP Address 설정>
IP Address를 추가한 다음, 명령프롬프트에서 ipconfig를 수행하면 아래와 같은 결과를 얻을 수 있다.
이제 TCP/IP설정은 마쳤다. 다음엔 각각의 웹사이트를 위한 설정을 해야 한다. 관리도구-인터넷서비스관리자 (ISM)을 선택한다. 기본사이트인 mcpworld.net은 이미 설정한 상태이다. 추가로 호스팅하길 원하는 insidesql.net 사이트와 dotnetkorea.org 사이트를 만들어야 할 것이다. 관리콘솔의 서버이름을 클릭하고, 새로만들기-웹사이트를 누른다.<화면3>
<화면3. 인터넷서비스관리자를 이용한 웹사이트 추가>
웹사이트 만들기 마법사가 실행되면 웹사이트 이름을 입력한다. 관리자가 구별하도록 하기 위한 이름이므로 다른 사이트와 구분지을 수 있는 이름을 할당하면 된다. 예제에서는 도메인 이름을 기록하였다.<화면4>
<화면4. 웹사이트 이름 부여>
"IP주소 및 포트설정"화면에서 기본설정은 (모두 할당되지 않음)이라는 설정으로 되어 있다. <화면5>에서 드롭다운콤보박스를 클릭하면 앞에서 설정한 IP Address를 볼 수 있다. www.insidesql.net 웹서버로 할당된 IP Address인 192.168.10.2를 선택한다.
<화면5. IP 주소 및 포트설정>
다음엔 웹사이트 홈디렉터리를 설정해야 한다. [찾아보기]를 클릭하여 웹사이트가 저장된 폴더의 위치를 찾아서 지정해 준다.<화면6> <화면7>
<화면6. 웹사이트 홈 디렉터리 지정>
<화면7. 웹사이트 홈 디렉터리 지정>
마법사를 마치면 <화면8>에서 보이는 것처럼 insidesql.net 웹사이트가 추가되었고, 잘 동작하고 있음을 보여준다. 웹사이트를 시작하는데 문제가 있었다면 insidesql.net 옆에 (중지됨)이라는 메시지를 보여주게 된다.
<화면8. 웹사이트 추가가 완료된 화면>
이제
테스트를 해 보자. 웹 브라우저를 띄우고 URL창 "http://www.insidesql.net"을 입력해 보았다. DNS를 통해서 www.insidesql.net 의 IP Address가 92.168.10.2인 것을 알아내고, http 프로토콜로서 웹서버에 홈페이지를 요청하는 get 명령어를 전송하게 된다. 그 결과 <화면9>의 홈페이지를 볼 수가 있게 되었다. 같은 과정으로 www.dotnetkorea.org 도 추가해 주면 된다.
<화면9. http://www.insidesql.net 홈페이지>
(1)의 경우는 웹사이트마다 서로 다른 IP Address를 할당함으로써 다중웹사이트 호스팅을 가능하도록 하였다. 웹사이트가 10개라면 서버는 10개의 IP Address를 가지고 있어야 한다. 만일 회사에서 IP Address의 여분이 없다면 어떻게 할까? 혹은 Network Adapter Card 하나에 IP Address 하나만 가지고 여러 웹사이트를 호스팅하고 싶다면 어떻게 해야 할까? <화면10>을 보면 dotnetkorea.org 사이트가 중지되어 있는 것을 확인할 수 있다.
<화면10. Web service가 중지된 웹사이트>
마우스 오른쪽 단추를 이용하여 dotnetkorea.org 사이트를 시작시키면 <화면11>과 같은 에러메시지가 나오면서 시작되지 않음을 확인할 수 있다. 서버바인딩이 충돌났다구?? 이게 무슨 소리람~ 대체 에러메시지라고 알려주긴 하는데 보면 짜증스럽기만 하다니깐~^^ 에러메시지에 대한 일반적인 생각이다. 에러가 뜨면 한번쯤은 읽어보는 습관을 들이자. 곰곰이 읽어보면 메시지에 해결책이 들어있다. 골치아프면 그냥 [확인]버튼을 누르자. 설마 시스템이 폭파되지야 않을테니..
<화면11. Port Number 중복으로 binding 에러메시지>
<화면12. dotnetkorea.org 사이트 등록정보>
dotnetkorea.org의 등록정보를 열어보면 <화면12>과 같다. TCP포트가 80번이다. 기본웹사이트인 www.mcpworld.net 또한 포트넘버 80번을 사용하고 있다. 새롭게 추가한 웹사이트인 dotnetkorea.org사이트가 기본웹사이트와 동일한 포트넘버를 사용함으로써 포트충돌이 발생한 것이다. TCP/IP 환경에서 통신을 이해하는데 계층구조를 이해하면 접근이 쉬워진다. 무슨 소린가 하는 독자는 강의실의 "TCP/IP 기초"를 참고하라. "inetinfo process (웹서비스) -> TCP Port Number -> IP Address -> MAC Address " 의 체계로서 어플리케이션부터 물리적인 네트워크 어댑터 카드까지 데이터를 전송할 수 있게 된다.
이것을 하나의 흐름으로 묶어주는 과정을 바인딩(Binding)이라고 한다. 이미 하나의 IP Address, 80번 포트, 기본웹사이트로써 바인딩되어 서비스가 시작되어 있는데, 다른 웹사이트에 바인딩하려는 시도를 했기 때문에 충돌이 발생하고 사이트를 시작하지 못했다는 에러를 보여주는 것이다. 그렇구나.. 그럼 충돌이 발생안하도록 하면 될거 아냐?? 맞다. 그럼 된다.
방법은 있다. 2가지의 방법을 고려해 볼 수 있다.
일단 DNS서버에서는 3개의 이름이 192.168.10.1 과 같이 하나의 IP Address를 가리키도록 설정을 해야한다. 당연한 얘기다. IP Address가 하나만 있는 상태에서 여러개의 웹사이트를 서비스한다고 했으니 말이다.
(2)TCP Port 지정
Port Number를 변경하는 방법을 생각할 수 있다. 아래의 <화면13>의 예제에서는 TCP포트 번호를 '8002'로 변경하였다.
<화면13. TCP포트 변경>
그 다음 중지되어 있는 사이트를 클릭하고 마우스 오른쪽 버튼을 눌러 [시작]을 클릭한다. 그러면 이번에는 에러메시지가 없이 사이트가 시작됨을 확인할 수 있다.<화면14>
<화면14. Internet Service Manager 관리콘솔>
클라이언트로서 잘 접근이 되는지 테스트를 해 보자. URL 창에 http://www.dotnetkorea.org 만 입력하면 에러가 발생한다. URL창에 http://www.dotnetkorea.org 라고 입력하는 것은 http://www.dotnetkorea.org:80 과 같은 의미이다. 웹서버의 Well-known port인 80번이 생략되어 있는 것이기 때문이다. 위에서 80번 포트를 8002번으로 변경했으므로 당연히 http://www.dotnetkorea.org:8002라고 입력을 해 주어야만 한다.<화면15>
<화면15, www.dotnetkorea.org 홈페이지 >
잘 동작하긴 하지만 뭔가 석연찮다. 이게 뭐야? 라는 소리가 나올 독자도 있을 것이다. 기껏 웹사이트를 개발했는데, 사용자들에게 8002라는 숫자까지 기억하도록 해야만 된다는 얘기네? 간단한 방법이긴 하지만, 실제로 제시한 해결책으로서 포트변경은 완전한 방법은 되질 못한다. 사용용도라고 하면, 이미 있는 기본 웹사이트 내에서 다른 사이트로 하이퍼링크 형태로 제공되는 경우라면 어차피 사용자들이 직접 주소를 입력할 필요가 없으니 상관없겠지만, 별도의 홈페이지로서 서비스하기엔 URL로서 부족한 면이 있다. 이것을 해결할 수 있는 방법이 또 하나의 해결책인 Hostheader를 이용하는 방법이 있다. 한 대의 웹서버로서 다중 웹사이트를 호스팅하는 것으로서는 가장 제대로 사용하는 방법이라고 보여진다.
(3)HOST Header 기법
dotnetkorea.org 웹사이트의 등록정보를 열어서 8002로 변경했던 포트번호를 80번으로 되돌리고, IP Address 항목 옆에 있는 [고급]버튼을 클릭한다. <화면16>의 예제처럼 '이 웹사이트의 복수ID' 창의 기본설정된 항목을 클릭하고, [편집]버튼을 눌러서 '호스트 헤더 이름'란에 www.dotnetkorea.org 라고 입력한다. 확인을 눌러서 설정을 마치고, 웹사이트를 시작시킨다.
<화면16. 호스트 헤더 이름 추가>
같은 방법으로 insidesql.net 사이트도 호스트 헤더 정보를 추가했다.<화면17>
<화면17. www.insidesql.net 호스트 헤더 추가>
테스트를 해 보면 아래와 같은 결과를 얻을 수 있다.
이러한 호스트 헤더를 이용한 방법이 가장 많이 사용되고 있는 방법이다. 하지만, 몇가지 고려해 보야야 할 점이 있다. 호스트 헤더는 http 1.1 버전부터 지원되는 기능이다. 인터넷 익스플로러 3.0 이상, 넷스케이프 내비게이터 2.0 이상의 웹 브라우저를 이용했을 때만 사용할 수 있다는 것이다. 뭐 걱정할 필요 없겠다. 우리는 남들 다 쓰는 거 안쓰고는 못참으니까 말이다. 인터넷 익스플로러 3.0 이전버전을 쓰는 사람 찾기 어렵다. 또 한가지는 Secure Socket Layer (SSL)을 지원하지 않는다. SSL에서는 http request가 암호화 되기 때문에 호스트 헤더가 감추어지기 때문이다.
하지만 이러한 사항들만 생각한다면 간단한 설정으로 하나의 서버에서 여러개의 웹사이트를 호스팅 할 수 있다는 것은 큰 매력이 아닐 수 없다. 대부분이 기능이 그렇듯이 우리가 흔히 생각하는 기능들은 이미 구현이 되도록 제공이 되고 있다. 단지 조금 더 관심을 가지고 찾아보지는 않고 막연하게만 생각하기 때문에 못 쓰고 있을 뿐인 것이다. 필요한 기능이 있으면 찾아보자. 만일 찾아봐도 그러한 기능이 없다면? 바로 많은 돈을 벌 수 있는 아이템을 찾은 것이다.
댓글