톰켓 가상호스트

 

톰캣에서 하나의 IP로 여러개의 웹사이트를 운영하는 방법은 2가지가 있다.

1. 가상 호스트(Virtual Host)를 이용하는 방법

설치 환경은 다음과 같다.

* O/S : Windows XP
* Tomcat 6.0.10

설명의 편의를 위해 톰캣의 설치 디렉토리는 ‘TOMCAT_HOME’ 으로 표기할 것이다. 참고로 내 경우는 C:\Server\Tomcat6.0 이다.

설정하는 방법은 /TOMCAT_HOME/conf/에 있는 server.xml 파일만 수정하면 된다. server.xml의 쓸데없는 주석부분을 다 없애고 관련 부분만 남겨놓으면 아래와 같다.

    <Service name="Catalina">
          <Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" redirectPort="8443" />
          <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
          <Engine name="Catalina" defaultHost="localhost">
           <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
           <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
           </Host>
          </Engine>
    </Service>

위의 내용에서 핵심 부분은 <Host></Host> 영역이다.

1. 우선 <Connector port=”8080″ protocol=”HTTP/1.1″ 부분의 port를 80으로 수정한다.
도메인명이 기본으로 80포트를 사용하기 때문이다.

2. <Host>… </Host> 에 해당하는 부분을 복사하여 2개를 만든다. 그리고 이렇게 수정하자.

    <Host name="www.myweb1.com"  appBase="d:/webapps/myweb1" unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
           </Host>
           <Host name="www.myweb2.com"  appBase="d:/webapps/myweb2" unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
    </Host>

appBase=”webapps” 는 톰캣의 기본 웹루트인 TOMCAT_HOME/webapps 디렉토리를 가르킨다. 웹사이트를 원하는 디렉토리에 두고 싶다면 d:/webapps/myweb1 처럼 자기가 지정하고 싶은 곳으로 수정하면 된다.

3. 마지막으로 웹사이트들의 ROOT 디렉토리를 지정해주자. 아래의 폴더를 생성한다.
d:/webapps/myweb1/ROOT/
d:/webapps/myweb1/ROOT/WEB-INF/

d:/webapps/myweb2/ROOT/
d:/webapps/myweb2/ROOT/WEB-INF/

그리고 WEB-INF 폴더 밑에 각각 web.xml 파일을 추가한다. 그냥 /TOMCAT_HOME/webapps/ROOT/WEB-INF/에 있는 web.xml 을 복사하면 된다.

4. 테스트하기 위해 ROOT/index.html 또는 index.jsp를 만든다.

이제 톰캣을 재시작하고 웹브라우저로 접속해 보자.
http://www.myweb1.com
http://www.myweb2.com

정말 간단하지 않은가?

자 그럼 다음으로 IP 어드레스의 포트를 이용하는 방법에 대해서 설명하겠다.

2. IP Address의 port를 여러개 사용하는 방법

* O/S : Windows XP
* Tomcat 6.0.10

설명의 편의를 위해 톰캣의 설치 디렉토리는 ‘TOMCAT_HOME’ 으로 표기할 것이다. 참고로 내 경우는 C:\Server\Tomcat6.0 이다.

설정하는 방법은 간단하다. /TOMCAT_HOME/conf/에 있는 server.xml 파일만 수정하면 끝이다. server.xml의 쓸데없는 주석부분을 다 없애고 핵심부분만 남겨놓으면 아래와 같다.

    <Service name="Catalina">
      <Connector port="8080" protocol="HTTP/1.1" 
       maxThreads="150" connectionTimeout="20000" 
       redirectPort="8443" />
      <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
      <Engine name="Catalina" defaultHost="localhost">
       <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
        resourceName="UserDatabase"/>
       <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true"
        xmlValidation="false" xmlNamespaceAware="false">
       </Host>
      </Engine>
     </Service>

우선 표시한 부분만 이해하고 넘어가도 상관없다.
Connector port=”8080″은 HTTP로 넘어오는 포트를 지정하는 것이다. 톰캣의 기본 포트가 8080인 이유가 여기에 있다. 따라서 8080 대신 기본 80포트를 사용하고 싶다면? 바로 이 부분을 port=”80″으로 바꾸어주면 된다.

다음, Host 지시어의 appBase=”webapps” 는 웹어플리케이션(웹사이트)의 위치를 나타낸다. appBase=”./webapps”와 같은 의미다. 실제 위치는 TOMCAT_HOME/webapps이다. 물론 “d:/weapps/myweb1” 과 같이 절대경로로 지정하는 것도 가능하다.

그럼 웹사이트를 하다 더 추가하고 싶다면? 위의 <Service>…</Service>를 하나 더 만들어 버리면 된다. 위의 코드를 복사한 다음 server.xml 에 추가한다.

    <Service name="Catalina2">
      <Connector port="9090" protocol="HTTP/1.1" 
         maxThreads="150" connectionTimeout="20000" 
         redirectPort="8443" />
      <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
     
      <Engine name="Catalina2" defaultHost="localhost">
       <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
         resourceName="UserDatabase"/>
     
       <Host name="localhost"  appBase="d:/webapps/myweb2"
        unpackWARs="true" autoDeploy="true"
        xmlValidation="false" xmlNamespaceAware="false">
       </Host>
      </Engine>
     </Service>

다른 웹어플리케이션을 돌리기 위해 서비스를 하나 더 추가한 것이다.
port=”9090″ 은 새로 추가하고 싶은 포트이다.
appBase=”d:/webapps/myweb2″는 9090 포트에서 돌아갈 웹사이트 위치이다.

이제 server.xml 설정은 끝난 것이다.
마지막으로 웹사이트의 ROOT 디렉토리를 지정해주자. 아래의 폴더를 생성한다.

d:/webapps/myweb2/ROOT/
d:/webapps/myweb2/ROOT/WEB-INF/
(WEB-INF 폴더를 만들고 web.xml 파일을 추가한다. 그냥 /TOMCAT_HOME/webapps/ROOT/WEB-INF/에 있는 web.xml 을 복사하면 된다.

무지 간단하다. 하지만 난 이 간단한 것을 위해서 하루종일 삽질해야만 했다. 검색해 보아도 문서는 많은데 실제 도움이 될만한 것이 별로 없었다.

테스트하기 위해 ROOT/index.html 또는 index.jsp를 만든다.
이제 톰캣을 재시작하고 웹브라우저로 접속해 보자.
http://localhost:8080
http://localhost:9090

ROOT 디렉토리의 이름을 바꾸고 싶다면

<Host name="localhost" appBase="d:/dev/myweb">
 <Context path="" docBase="d:/dev/myweb"/> <!-- 추가-->
</Host>

또는

톰캣에서 conf 폴더에 있는 server.xml 파일을 수정해야 한다.

다음 코드를 추가한다.

      <Host name="ebizstudy.cbnu.ac.kr" debug="0" appBase="/home/ebizlab/defaultroot"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">
        <Logger className="org.apache.catalina.logger.FileLogger"
                 directory="logs"  prefix="ebizstudy.localhost_log." suffix=".txt"
            timestamp="true"/>
         <Context path="" docBase="" debug="9" reloadable="true" >
     <Logger className="org.apache.catalina.logger.FileLogger"
   debug="0"
   directory="logs"
   prefix="ebizstudy.localhost_root_log." 
   suffix=".txt"
   timestamp="true"
   verosity="1"/>
    
     <Resource auth="Container"
   name="jdbc/ebizstudy"
   scope="Shareable"
   type="javax.sql.DataSource"/>
     <ResourceParams name="jdbc/ebizstudy">
   <parameter>
    <name>url</name>
   <value>jdbc:postgresql://localhost:5432/ebizstudy</value>
   </parameter>
   <parameter>
    <name>maxIdle</name>
    <value>10</value>
   </parameter>
   <parameter>
    <name>maxActive</name>
    <value>20</value>
   </parameter>
   <parameter>
    <name>driverClassName</name>
    <value>org.postgresql.Driver</value>
   </parameter>
   <parameter>
    <name>username</name>
    <value>ebizstudy</value>
   </parameter> 
   <parameter>
    <name>password</name>
    <value>ebizstudy</value>
   </parameter>  
   <parameter>
    <name>maxWait</name>
    <value>-1</value>
   </parameter> 
   <parameter>
    <name>removeAbandoned</name>
    <value>true</value>
   </parameter> 
   <parameter>
    <name>removeAbandonedTimeout</name>
    <value>60</value>
   </parameter> 
   <parameter>
    <name>logAbandoned</name>
    <value>true</value>
   </parameter>  
   <parameter>
    <name>factory</name>
    <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
   </parameter>   
     </ResourceParams>
    </Context>
      </Host>

표시한 부분이 가상 도메인을 등록하는 부분으로 자신의 컴퓨터에서 호스트 등록하면 IP를 입력하지 않고 위 도메인으로 접근 가능하다.

 

This entry was posted in WEB/WAS and tagged , , . Bookmark the permalink.

댓글 남기기