광고 차단 플러그인 해제 후 새로고침(F5) 하시면
컨텐츠를 정상적으로 볼 수 있습니다.
(Please turn off AdBlock Plug-in.)


p.s. 광고에도 여러분이 관심을 가질만한 정보가 녹아있을 수 있습니다.


http://joont.tistory.com/46

https://httpd.apache.org/docs/2.4/ko/vhosts/examples.html

https://httpd.apache.org/docs/2.4/en/vhosts/examples.html

위의 세 글을 참고하여 윈도우용 Apache 2.4를 통해 한대의 PC(+하나의 IP)에 다수의 도메인(혹은 서브도메인)을 연결하는 방식을 정리합니다.

따라했을 때 누구나 오류 없이 성공하는 것을 목표로 합니다.


홈서버 용으로 매일 켜놓고 있는 컴퓨터 한 대. 홈페이지 하나만 띄워두기엔 잉여 시스템 자원이 아깝더군요.

다수의 도메인을 서버 한 대를 향하도록 하고, 각 도메인마다 개별 웹문서를 보내줄 수 있다면? 좋겠죠!! (웹호스팅 서비스로 발전을...ㅋ)

아파치에서 가상호스트(VirtualHost)라는 기능을 쓰면 이게 가능하더군요.


본론 시작하기 전에

윈도우용 아파치 2.4로 하나의 사이트를 운영 중인 홈서버에서 Apache 설정파일을 살펴보죠.

아파치 2.4 설치경로 내의 conf 폴더에서 httpd.conf 설정파일을 메모장으로 열겠습니다.



위 스크린 샷을 참고하면서 아래 본문을 읽어주세요.


DocumentRoot(웹문서 경로. 저는 htdocs 입니다)와 <Directory> ~~ </Direcroty>(해당 경로의 규칙)이 세트로 뭉쳐 다니는 것을 확인할 수 있습니다. 이 점을 기억해 둡시다.

참고로 <Directory> 안의 내용은 해당 경로의 .htaccss 파일로 대체할 수 있습니다.



이제 본론으로.

(예를 들어) 저는 ① examples.com  ② sub2.example.com (example.com의 서브도메인)  ③ www.korea.kor  이라는 도메인을 각각 ① main폴더, ② sub2폴더, ③ sub3폴더에 매칭시키고 싶었습니다. 각 폴더에는 경로를 구분할 수 있게끔 서로 다른 내용의 index.html 파일을 심어놨고요.

(참고로 연습용 도메인들은 hosts파일 수정으로 가상 생성했습니다(구입 X). hosts 파일 수정 방법이 궁금하시면 http://jimnong.tistory.com/657 이 글을 참고하세요.)



그래서 httpd.conf 파일 맨 아랫줄에 위 스크린 샷처럼 추가해 줬습니다. 예를 들어 examples.com 연결 부분만 설명해 볼게요.


<VirtualHost examples.com:80>

   DocumentRoot "c:/Apache24/htdocs/main"

   ServerName examples.com

   ServerAlias www.examples.com

</VirtualHost>


일단 붉게 표시한 부분을 일치하게끔 적어줘야 합니다. 다른 포스팅들이나 아파치 공식문서 보면 <VirtualHost *:80> 이렇게 시작하라고 나와있는데, <VirtualHost *:80> 처럼 입력하면 VirtualHost 위쪽에 존재하는(제일 첫번째 스크린샷) DocumentRoot "c:/Apache24/htdocs" 이부분과 충돌할 수 있습니다. 충돌이 생기면 웹브라우저 주소창에 http://localhost 라고 입력했을 때 examples.com 경로(main 폴더)의 웹문서가 열립니다.


※ C:\Windows\System32\drivers\etc\hosts 파일에 도메인을 추가하지 않았다면 <VirtualHost *:80> 이렇게 시작해야 합니다.


DocumentRoot에는 웹문서 경로를 적은 겁니다.

ServerAlias는 도메인 앞에 www를 넣고 접속하는 사람들에게도 examples.com의 내용을 보여주기 위해 적어넣은 겁니다.

(참고로 ServerAlias에는 공백으로 구분하면서 여러개의 도메인을 적을 수 있고, 심지어 *.examples.com 처럼 *도 적을 수 있습니다. 하지만 이렇게 하면 서브도메인(예 : sub2.examples.com)을 별도의 경로에 매칭시키는 것은 물 건너가겠죠. ;;; )



이제 명령프롬프트 창을 관리자 권한으로 띄우고 httpd.exe -k restart 라고 입력하여 아파치 서비스를 재시작해 줍니다. 그리고 웹브라우저 주소창에 VirtualHost 설정 주소들을 넣어봅니다(엣지브라우저에서는 주소 끝까지 치고 Shift+Enter 눌러야 되더군요.).



스크린샷처럼 경로 구분용 index.html 파일들의 내용이 뜨면 성공한 겁니다.


참고로 VirtualHost 내용의 형식이 궁금하다면 아파치 설치경로의 conf/extra/httpd-vhosts.conf 파일을 보면 되는데요,


▲ httpd-vhosts.conf 내용


제가 적었던 내용에서 ErrorLog(에러 로그) 정도만 추가해주면 깔끔하고 좋겠네요.


그리고 제가 도입 부분에서 <Directory "경로"> ~~ </Direcroty>가 세트로 따라다닌다고 언급했던 것 기억나시죠? VirtualHost 경로에도 디렉토리 옵션이 필요하면 </VirtualHost> 위나 아래에 <Directory "경로"> ~~ </Direcroty>를 추가해주세요. VirtualHost 영역 안쪽에 있든 바깥쪽에 있든 상관없습니다.


<VirtualHost examples.com:80>

   DocumentRoot "c:/Apache24/htdocs/main"

   ServerName examples.com

   ServerAlias www.examples.com


   <Directory "c:/Apache24/htdocs/main">

      ~~ 

   </Direcroty>


</VirtualHost>


이렇게 DocumentRoot 경로와 일치시켜서 적어주세요.

( ※ C:\Windows\System32\drivers\etc\hosts 파일에 도메인을 추가하지 않았다면 <VirtualHost *:80> 이렇게 시작해야 합니다. )


끝.

------------------------------------------------

다른 포스팅들을 보면 Include conf/extra/httpd-vhosts.conf 의 주석을 해제(# 삭제)하고 httpd-vhosts.conf 파일에 VirtualHost 내용을 적는 식으로 가상호스트를 구현하던데, httpd.conf 파일에 바로 VirtualHost 적는거나 httpd.conf에서 httpd-vhosts.conf를 Include하는거나 같은 거라고 봅니다.


또... 아파치 한글 설명 문서(본문 최상단 링크)를 보면 NameVirtualHost *:80 적으라고 나와있던데, 한글 문서에 “이 문서는 최신판 번역이 아닙니다. 최근에 변경된 내용은 영어 문서를 참고하세요.”라고 나왔고 영문 문서엔 NameVirtualHost *:80 적는 부분이 빠져있습니다. 실제로 적어보면 오류를 뿜는데, 영문 문서대로 하는 게 맞는 것 같습니다.


트랙백 (0) 개   l   댓글 4

  • rim6699 (2018.06.01 10:17)

    안녕하세요! 웹디자이너로 근무 중인데 웹 서버에 관심애 생겨 공부중입니다.
    너무 자세하게 설명해주셔서 참고 많이 하고 있어요^^ 감사합니다.
    질문이 있는데 lacolhost로 들어가면 정상적으로 서브도메인이 다 뜨는데
    ServerName으로 들어가면

    사이트에 연결할 수 없음
    sub2.com의 서버 IP 주소를 찾을 수 없습니다.
    Google에서 sub2 검색
    ERR_NAME_NOT_RESOLVED

    이렇게 뜨거든요.. 이거 잡는 방법이 있나요?

    • 짐농 (2018.06.01 16:16 신고)

      rim6699 // 체크리스트를 정리해 드릴게요.
      - 도메인을 구입하고 A레코드/C레코드로 서브도메인을 등록했는지
      - 서스도메인을 등록했다면 DNS서버의 캐시 갱신주기나 TTL 시간동안 기다렸는지(반영이 실시간으로 안되는 경우가 있습니다.)
      - PC 상단에 있는 공유기(라우터)나 인터넷 회선에서 80포트를 차단하진 않았는지

  • 조장연 (2019.02.17 22:24)

    안녕하세요 서브도메인을 만들고 각 서브도메인에 따라 여러개의 멀티 사이트를 만들었을 경우 컨텐츠 페이지에 따라 어떤 페이지는 중앙(본사)에서만 관리하고 어떤 페이지는 각각의 서브도메인 사이트(대리점) 관리자가 운영할 수 있도록 분리가 가능한가요? 예를 들면 본사에서 관리하는 페이지와 각 대리점에서 관리하는 페이지를 따로 두고 싶거든요..

    • 짐농 (2019.02.17 22:47 신고)

      조장연 // 본사는 본사 도메인 데이터를 관리하면 되겠고, 대리점은 대리점 서브도메인 데이터를 관리하면 되겠습니다. 이게 정석적이고 구축자 입장에서도 제일 간편합니다.

      본사에서 올린 물건이 대리점에도 동시에 등록되게 하는 것은 구축비용이 많이 들어갑니다. 그대로 보이게만 하는 것은 가능할 수 있습니다(iframe 태그 이용). 하지만 어떤 방식을 택하든 동일문서로 분류되기 때문에 검색엔진노출에 불리합니다. 돈은 돈대로 쓰고 노출은 안되고. 아주 안좋은 케이스고, 실제로 악용의 소지가 있기 때문에 개발자들이 요구를 쉽게 들어주지는 않을 겁니다.

      옥션 본사, 옥션 서울대리점, 옥션 부산대리점, 옥션 광주대리점 등등으로 홈페이지가 나뉘었는데 홈페이지들마다 같은 물건이 보인다고 생각해보세요. 구매자 입장에서 끔찍하지 않겠습니까? 검색을 했는데 같은 물건이 같은 가격으로 계속 나와ㅋㅋㅋㅋㅋ 좀 그렇죠...

★ 댓글, 작은 정보지만 다른 분들께 큰 도움이 됩니다. ★