강좌

  • 웹서버
  • 아파치
  • 톰켓
HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
버츄얼웹 설치
조회 : 5,726  




리눅스 월드 편집부      

 

      한 개의 웹서버 프로그램에서 여러 개의 홈페이지를 운영하는 것을 버츄얼 웹서버라고 한다. 예를 들면 http://www.oto.co.kr과 http://linuxlab.oto.co.kr을 한 대의 컴퓨터에서 지원되게 하는 걸 말한다. 버츄얼 웹서버의 이점은 여러 회사의 홈페이지를 한 대의 컴퓨터에서 운영할 수 있으므로 서버 구입비 및 운영비를 절약할 수 있다는 것이다. 버츄얼 웹서버에서는 컴퓨터만 한 대이지 IP Address도 다르고 FQDN(Fully Qualified Domain Name)도 다르며 홈페이지 저장 위치도 다르므로 외부에서는 같은 호스트에서 운영된다는 것을 알 방법이 없다.

      여러 인터넷 서비스 업체에서 월 일정 비용을 받고 웹서버를 운영해주는 웹호스팅 서비스를 제공하고 있는데 이때 업체마다 별도의 호스트 및 웹서버 프로그램을 두는 게 아니라 바로 버츄얼 웹 기법을 써서 한 대의 호스트에 여러 업체의 홈페이지를 가동한다. 버츄얼 웹은 두 가지로 구분할 수 있는데 도메인 네임은 같고 호스트 네임만 달리하는 경우와 도메인 네임과 호스트 네임을 모두 달리하는 경우이다. 셋팅에서 큰 차이는 없으나 세부적인 면에서 약간 다르다.

      아래는 Apache 웹서버로 버츄얼 웹을 구현하는 절차를 설명한다. 이하에서 나오는 모든 예는 www.oto.co.kr(210.107.77.1)과 linuxlab.oto.co.kr(210.107.77.5) 두 개의 홈페이지에 한 대의 리눅스 호스트에서 운영하는 경우를 예로 들었다. (두 개뿐 아니라 그 이상도 가능하다.)

       

    1. 라우팅 테이블 작성

      버츄얼 웹을 운영하려면 우선 두 개 이상의 IP Address가 버츄얼 웹이 가동되는 한 대의 호스트에 부여되어야 하는데 만약 다른 네트워크에 속한 두 개의 IP Address를 버츄얼 웹서버가 설치된 호스트에 보내려면 버츄얼 웹서버가 설치된 랜의 인터넷과 연결된 라우터에서 두 개의 네트워크를 모두 라이팅해주어야 한다. 버츄얼 웹서버가 네트워크는 같고 호스트 어드레스만 다른 두 개의 IP Address를 갖는 경우는 이 과정은 필요없다.

       

    2. 리눅스에서의 조정

      1) Network Aliasind (IP aliasing)

      버츄얼 웹이 가동하려면 그 호스트에 두 개 이상의 FQDN 및 IP Address가 부여되어야 하므로 aliasing을 써야 한다. 즉 한 개의 랜카드에 두 개 이상의 IP Address를 부여해야 한다. Network Aliasing은 네트워크 주소 부분도 다른 경우이고 IP Aliasing은 호스트 부분 주소만 다른 경우이다. 아래는 IP Aliasing의 경우를 설명한다. 우선은 커늘을 컴파일해서 IP Aliasing을 커늘에서 지원하게 해야한다. 리눅스는 커늘 2.0 이상의 버전에서 IP Aliasing을 지원하나 배포본에서 기본으로 제공하는 커늘에는 IP Aliasing이 disable되어 있으므로 커늘을 컴파일해서 IP Aliasing을 포함시켜 주어야 한다.

      아래는 IP Aliasing을 쓰기 위한 커늘 컴파일 옵션이다.

      hanbi:/usr/src/linux$ make config
      Networking support (CONFIG_NET) [Y/n/?]
      * Networking options
      Networking aliasing (CONFIG_NET_ALIAS) [Y/n/?]
      TCP/IP networking (CONFIG_INET) [Y/n/?]
      IP: tunneling (CONFIG_NET_IPIP) [Y/m/n/?]
      IP: aliasing support (CONFIG_IP_ALIAS) [Y/m/n/?]
      * Networking device support
      Network device support (CONFIG_NETDEVICES) [Y/n/?]
      Ethernet (10 or 100Mbit) (CONFIG_NET_ETHERNET) [Y/n/?]

       

      2) ifconfig 및 route 명령

      커늘에서 IP Aliasing이 가능해졌으면 랜카드에 두 개의 어드레스를 설정해준다. 이는 ifconfig와 route 명령으로 가능하다. 아래는 데비안에서 eth0 랜카드에 IP Aliasing을 써서 두 개의 어드레스를 할당하는 경우의 네트워크 파일 예이다. (슬랙웨어라면 rc.inet1에 넣는다)

      hanbi:~$ cat/etc/init.d/network
      #!   /bin/sh
      ifconfig to 127.0.0.1
      route add -net 127.0.0.0
      IPADDR=210.107.77.1
      NETMASK=255.255.255.0
      NETWORK=210.107.77.0
      BROADCAST=210.107.77.255
      GATEWAY=210.107.77.254
      ifconfig eth0 ${IPADDR} netmask ${NETMASK} broadcast ${BROADCAST}
      route add -net ${NETWORK}
      route add default gw ${GATEWAY} metric 1
      ifconfig eth0:0 210.107.77.5 netmask 255.255.255.0 broadcast 210.107.77.255
      route add 210.107.77.5 dev eth0:0

      위의 셋업을 마치면 210.107.77.1과 210.107.77.5 두 개의 어드레스가 호스트에 부여된다. (마지막 2개의 줄이 랜카드에 두 번째 어드레스인 210.107.77.5를 부여하는 명령이다.) 다른 호스트에서 위 두 개의 IP Address를 telnet으로 접속하면 똑같이 login: 이 뜰 것이다. 아래는 ifconfig와 netstat 출력이다.

      hanbi:~$ ifconfig
      lo

          Link encap:Local Loopback
          inet addr: 127.0.0.1  Bcast: 127.255.255.255  Mask: 255.0.0.0
          UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1
          RX packets:0 errors:0 dropped:0 verruns:0
          TX packets:0 errors:0 dropped:0 verruns:0 

        eth0

            Link encap: 10Mbps Ethernet HWaddr 00:60:97:1E:95:3E
            inet addr:210.107.77.1 Bcast:210.107.77.255 Mask:255.255.255.0
            UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
            RX packets:142 errors:0 dropped:0 verruns:0
            TX packets:96 errors:0 dropped:0 verruns:0  
            Interrupt:11 Base address:0x300

          eth0:0

              Link encap: 10Mbps Ethernet HWaddr 00:60:97:1E:95:3E
              inet addr:210.107.77.5 Bcast:210.107.77.255 Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
              RX packets:0 errors:0 dropped:0 verruns:0
              TX packets:0 errors:0 dropped:0 verruns:0  

            hanbi:~$ netstat -nr
            Kernet IP routing table
             

            Destination

            Gateway

            Genmask

            Flags

            MSS Window

            irtt lface

            210.107.77.5

            0.0.0.0

            255.255.255.255

            UH

            1500 0

            0 eth0:0

            210.107.77.0

            0.0.0.0

            255.255.255.0

            U

            1500 0

            0 eth0

            127.0.0.0

            0.0.0.0

            255.0.0.0

            U

            3584 0

            0 lo

            0.0.0.0

            210.107.77.254

            0.0.0.0

            UG

            1500 0

            0 eth0

             

            위에서 eth0:0에 부여된 210.107.77.5가 ip aliasing으로 부여된 주소이다.
            210.107.77.254는 디폴트 게이트웨이(즉 인터넷과 연결된 라우터)의 주소이다.

             

            3) DNS 조정 및 hosts 파일 수정

            다음은 DNS 서버에 www와 linuxlab 두 개의 호스트 네임을 등록하고, /etc/hosts 파일에도 두 호스트 네임을 등록한다.

            127.0.0.1 localhost
            210.107.77.1  
            www.oto.co.kr   www
            210.107.77.5  linuxlab.oto.co.kr   linuxlab

             

          3. Apache에서 버츄얼 웹서버 설정

            아파치 웹서버 프로그램에서 버츄얼 웹을 설정하는 구성 파일은 httpd.conf 이다.  아래는 www.oto.co.kr의 DocumentRoot(html파일 저장 위치)가 /usr/local/etc/httpd/htdocs에 위치하고 (srm.conf에서 지정한다.) linuxlab.oto.co.kr은 /usr/local/etc/httpd/linuxlab에 위치하는 경우는 httpd.conf의 예이다. 다른 구성 파일은 변경이 필요치 않다. 두 웹서버의 Error Log와 Access Log은 다른 디렉토리에 지정하는 게 가능하다. (아래에서 www.oto.co.kr 은 log 디렉토리에  linuxlab.oto.co.kr은 logs-linuxlab에 저장된다.)
            아래는 httpd.conf 예이다.

            ServerType standalone
            Port 80
            HostnameLookups on
            User nobody
            Group #-1
            BrowserMatch Mozilla/2 nokeepalive
            ServerAdmin bae@mail.oto.co.kr
            ServerRoot /usr/local/etc/httpd
            #BindAddress *
            ErrorLog logs/error_log
            TransferLog logs/access_log
            PidFile logs/httpd.pid
            ScoreBoardFile logs/apache_status
            ServerName www.oto.co.kr
            #CacheNegotiatedDocs
            Timeout 300
            KeepAlive On
            MaxKeepAliveRequests 100
            KeepAlive Timeout 15
            MinSpareServers 5
            MaxSpareServers 10
            StartServers 5
            MaxClients 150

            MaxRequestsPerChild 30

            <VirtualHost Linuxlab.oto.co.kr>
            ServerAdmin webmaster@linuxlab.oto.co
            DocumentRoot /usr/local/etc/httpd/linuxlab
            ServerName linuxlab.oto.co.kr
            ErrorLog logs-linuxlab/error_log
            TransferLog logs-linuxlab/access_log
            </VirtualHost>

            위에서 <VirtualHost ... >에서 </VirtualHost> 부분이 linuxlab.oto.co.kr에 대한 버츄얼 웹 설정 부분이다. 버츄얼 웹 외에도 다른 방법으로도 한 대의 호스트에 두 개 이상의 웹 서버를 운영할 수 있다. 예를 들면 Port번호를 달리해서 여러 개의 웹서버를 가동할 수는 있으나 이 경우는 사용자가 웹서버 port 번호를 알아야 접근이 가능하다. 



          [원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=854


          이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

           
          (주) 수퍼유저