아파치 웹서버에서 컴퓨터 하나로 여러 도메인네임주소를 쓰는 원리

아파치 웹 서버에서 컴퓨터 하나로 여러 도메인네임주소를 사용하는 원리를 이해해 봅시다. 어떻게 www.example.com, blog.example.com 은 물론 아예 다른 도메인네임주소인 www.test.com 등을 모두 한대의 컴퓨터에서 서비스할 수 있는 걸까요.

웹 서버는 80포트를 사용한다.

웹사이트는 기본적으로 80포트를 통해 통신이 이루어집니다. 구글컴퓨터의 IP인 172.217.24.196에 접속을 하더라도, 172.217.24.196:80으로 접속하게 되는 것입니다. 이 포트는 기본포트이므로 주소창에 따로 나타나지도 않습니다.

이는 www.google.com과 같은 도메인네임주소를 사용할 때에도 마찬가지입니다. 주소창에 www.google.com 을 입력하면, 도메인네임서버와의 통신을 통해 172.217.24.196을 반환받습니다. 실제로는 172.217.24.196:80에 접속을 하게 되지만, 주소창에는 www.google.com만 뜨게 됩니다.

즉, www.google.com을 입력하면, 무조건 80번 포트로 운영중인 웹 사이트에만 접속할 수 있습니다. 물론 ISP 업체에서 80번 포트를 막아놨을 경우 우회하는 방법들이 있기는 하지만, 기본적으로는 80번 포트를 제외한 나머지 포트는 꼭 포트번호까지 써줘야 합니다.

하나의 포트번호는 하나의 사이트만 서비스 가능하다.

만일 다른 웹 사이트를 만들고 싶다면, 172.217.24.196:8080과 같이 다른 포트번호를 사용해야 합니다. 그런데 이 주소를 직접 도메인네임주소와 연결시킬 방법이 없습니다. www.google.com:8080과 같이 포트번호를 꼭 써준 주소를 써야하죠. 숫자주소가 싫어서 도메인네임서버를 사용하는 건데, 다시 숫자가 주소를 써야한다니 달가울 리가 없습니다.

도메인네임서버(DNS)에는 포트번호를 넣을 수 없다.

예를들어 1.2.3.4:80 에게는 www.example.com 이라는 문자 주소를 부여하고, 1.2.3.4:81에게는 www.test.com이라는 문자주소를 부여하고 싶다고 해봅시다. 간단히 생각해보면, 도메인네임서버(DNS)에게 www.test.com이 들어오면 1.2.3.4:81로 가라고 A레코드를 주면 될 것 같습니다. 하지만 포트번호를 끼고 레코드를 작성할 수가 없습니다. 그렇기 때문에, 1.2.3.4 에 www.example.com과 www.test.com을 모두 연결해야 합니다. 그리고 1.2.3.4:81 로 접속하고 싶다면, www.test.com:81로 접속해야만 합니다.

이 방법은, www.example.com과 www.test.com은 모두 1.2.3.4:80으로 연결되고, www.example.com:81과 www.test.com:81 모두 1.2.3.4:81로 연결됩니다. 전혀 원하는 방향이 아니죠. 그래서 Virtual Host 기능을 사용하게 됩니다.

1단계: 도메인네임서버(DNS)에서 A레코드 작성하기

일단, 도메인네임서버(DNS)에서 할 일은 간단합니다. www.example.com이든 www.test.com이든 blog.example.com이든 모두 자신의 아이피(여기서는 1.2.3.4)로 연결하는 A 레코드를 작성합니다.

이 단계까지 올바로 마쳤다면, www.test.com을 입력하든 www.example.com을 입력하든, 결국 숫자주소 1.2.3.4:80에 해당하는 www.example.com 사이트가 나타나야 합니다. 아직은 이상해 보이지만, 이상하게 생각할 필요 없습니다. 저도 처음에 설정하면서 이 부분이 가장 헷갈렸습니다.

아파치 웹 서버에서 가상호스트(Virtual Host)로 관리

도메인네임서버(DNS)에서 올바로 설정을 마쳤다면, 이제는 아파치 웹 서버의 모듈인 가상호스트(Virtual Host)를 알맞게 설정해주면 됩니다. 가상호스트(Virtual Host)의 기능은, 도메인네임서버(DNS)에게 1.2.3.4를 소개받아 접속한 사람이 www.example.com 을 치고 소개를 받은건지, www.test.com을 치고 소개를 받은건지를 구분해서 각각 알맞은 폴더를 보여주게 됩니다.

만일 www.example.com을 치고 온 사람이라면, 자동적으로 1.2.3.4으로 보내주고, www.test.com을 치고 온 사람은 자동적으로 1.2.3.4:81로 보내주고서 포트번호를 숨겨줍니다. 이것이 바로 한 컴퓨터로 80번 포트를 갖는 여러 주소의 사이트를 운영하는 법입니다.

여전히 www.example.com:81 로도, www.test.com에 해당하는 1.2.3.4:81에 접속할 수는 있습니다. 그렇기 때문에 가상호스트(Virtual Host)를 사용할 때에는 81처럼 손쉽게 넣을 수 있는 포트가 아닌 만번대 이상의 찍어서 맞추기는 힘든 포트를 사용하는 것이 좋습니다. 기본적으로 macOS Server에서는 이 작업을 알아서 해줍니다.

정리하자면 다음과 같습니다.

  • 1.2.3.4를 입력하면 1.2.3.4가 열림
  • www.example.com을 입력하면 1.2.3.4:80이 열림,
    주소창에는 www.example.com이 보임
  • www.test.com을 입력하면 1.2.3.4:81이 열림,
    주소창에는 www.test.com이 보임

사용법만 알면 쉬운 macOS Server

웹 검색을 해보면 아파치 웹 서버 자체에 대한 정보는 많고, macOS Server에 대한 정보는 별로 없기 때문에, 오히려 아파치의 config 파일을 직접 수정하는 게 쉬울 수도 있습니다. 저도 그랬어요. macOS Server를 어떻게 설정해야 가상호스트(Virtual Host)를 사용할 수 있는지 한참 헤맸습니다. 분명 가상호스트(Virtual Host) 기능이지만, 앱의 UI에서 그런 단어는 전혀 찾을 수 없으니까요.

macOS Server에서는 다음 링크와 같이 설정하면 손쉽게 Virtual Host를 이용해서 컴퓨터 한대로 80번 포트로 운영되는 여러 도메인네임주소를 사용할 수 있습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *