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 적는 부분이 빠져있습니다. 실제로 적어보면 오류를 뿜는데, 영문 문서대로 하는 게 맞는 것 같습니다.


반응형