본문 바로가기

Apache httpd server/Virtual Host

Apache Virtual Host

Apache Web Server VirtualHost



개요

Apache 웹서버에서 지원하는 가상호스트기능을 사용하면 한개의 서버(하나의 IP)를 이용해서 다수개의 내용이 다른 사이트(도메인)를 운영할 수 있다

DNS에 등록된 다수개의 도메인에 동일한 IP가 설정된 경우에는 이들 도메인을 통해 이용자가 요청하면 그 요청은 물리적으로 동일한 웹서버로 전달될 것이다. 그러므로 한개의 시스템에는 다수개의 웹사이트가 실행되는 상태이어야 하며 요청 도메인을 확인하여 해당 사이트로 요청을 전달해야 하는데, 이러한 기능을 Apache 웹서버의 VirtualHost 설정으로 쉽게 해결할 수가 있다

Apache HTTP Server에서는 이름 기반 가상호스트IP 기반 가상호스트 기능을 제공하며 거의 이름기반 가상호스트가 사용되고 있다

IP 기반 가상 호스트 설정은 한개의 서버가 다수개의 IP주소를 가진 경우 한 시스템에서 2개 이상의 사이트 운영할 때 사용된다



테스트 환경

Windows 7, 

Apache 2.4 windows 64



이름기반 가상호스트(Name-based VirtualHost) 설정

하나의 IP가 설정된 시스템에 다수개의 웹사이트가 실행되는 경우 이용자가 요청한 도메인 이름을 확인하여 해당 사이트로 분기하도록 설정한다

Apache2/conf/etc/httpd-vhost.conf의 VirtualHost를 설정하여 이름기반의 가상 호스트를 사용 할 수 있다.

httpd.conf 파일에서 Include httpd-vhosts.conf 행의 주석을 해제해야 한다.

아래의 안내에 따라서 편집을 진행하면 된다


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


httpd-vhosts.conf 설정 예제

<VirtualHost *:80>

  ServerAdmin master@mycom.co.kr

  ServerName www.site1.com

  ServerAlias site1.com

  DocumentRoot C:/Apache2/htdocs/site1

  ErrorLog logs/error_log

  CustomLog logs/access_log

</VirtualHost>


<VirtualHost *:80>

  ServerAdmin master@mycom.co.kr

  ServerName www.site2.com

  ServerAlias site2.com

  DocumentRoot C:/Apache2/htdocs/site2

</VirtualHost>

위와 같이 설정했다면 DocumentRoot 로 등록된 실제 디렉토리를 생성해주어야 한다


htdocs 이외의 다른 드라이브나 폴더를 DocumentRoot 로 설정하려면....

<VirtualHost *:80>

  ServerAdmin master@mycom.co.kr

  ServerName www.site1.com

  ServerAlias site1.com

  DocumentRoot D:/site1

  <Directory D:/>

        Options FollowSymLinks  <--http://httpd.apache.org/docs/current/sections.html

        AllowOverride None       

   </Directory>

   <Directory D:/site1/>

        Require all granted

        Options Indexes FollowSymLinks MultiViews

        AllowOverride None

        Order allow,deny

        allow from all

    </Directory>

</VirtualHost>


<VirtualHost *:80>

  ServerAdmin master@mycom.co.kr

  ServerName www.site2.com

  ServerAlias site2.com

  DocumentRoot D:/site2

    <Directory D:/>    

        Options FollowSymLinks

        AllowOverride None

   </Directory>

   <Directory D:/site2/>

        Require all granted        

        Options Indexes FollowSymLinks MultiViews

        AllowOverride None

        Order allow,deny

        allow from all

    </Directory>

</VirtualHost>


윈도우에서는 위에 설정된 가상 호스트가 호출되는지 로컬 시스템에서 테스트하려면 hosts 파일에 아래처럼 IP와 도메인 이름을 등록해야 한다.

hosts 파일에 등록된 사이트는 로컬시스템에서 참조되어 해당 주소로 바로 접근할 때 사용된다


C:Windows\System32\drivers\etc\hosts

# 127.0.0.1  localhost

127.0.0.1  www.site1.com

127.0.0.1 site1.com

127.0.0.1  www.site2.com

127.0.0.1 site2.com



Apache2/conf/httpd.conf 파일을 열고 아래에 표시된 행을 주석해제한다

Include conf/extra/httpd-vhosts.conf



가상 호스트에 접속 테스트

Apache restart 후 http://www.site1.com, http://www.site2.com URL으로 정상적으로 접속이 되는지 테스트 해보자.

위의 도메인으로 접속하면 문제없이 해당 사이트로 접속이 되는 것을 확인할 수 있다


http://localhost 접속 테스트

하지만 위와 같이 설정하기 전에는 잘 작동했던 http://localhost, http://127.0.0.1 을 사용하면 설정된 첫번째 가상 호스트로 요청이 전달되는 것을 확인할 수 있다. 예를 들어, 위와 같이 가상 호스트를 설정하고 http://localhost 으로 요청하면 그 요청은 첫번째 가상 호스트인 www.site1.com 으로 전달된다