Web Programming/JSP2008/03/11 14:41

[출처] 톰캣(Tomcat)에서 컨텍스트를 설정하는 방법 (Tomcat 6.0에서 테스트)


[주의사항] 톰캣 설정파일에서 한글을 사용하지 말자. (주석안의 한글고 사용하면 톰캣이 실행안된다.)

TOMCAT_HOME : 톰캣 설치 디렉터리


1. 도메인으로 분류하는 방법

TOMCAT_HOME\conf\server.xml 을 열면 기본적으로 하나의 Service 엘리먼트가 있고
그 하위에 Engine 엘리먼트가, 또 그 하위에 아래와 같은 하나의 Host 엘리먼트가 있다.

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>

아래와 같이 추가하려는 도메인으로 Host 엘리먼트를 하나 더 추가한다.

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>
      <Host name="www.testdomain.com"  appBase="C:\testdomain"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>

appBase는 이 컨텍스트의 물리적 영역이 되겠다.
물론 실제의 물리적인 디렉터리도 아래와 같이 필요하다.

C:\testdomain\ROOT
C:\testdomain\ROOT\WEB-INF

WEB-INF의 web.xml등은 TOMCAT_HOME\webapps\ROOT\WEB-INF에서 복사한다.

C:\testdomain\ROOT 디렉터리는 이 컨텍스트의 루트 디렉터리로 작동한다.

여기서 www.testdomain.com은 추가하려는 도메인이 되겠으며,
실제로 도메인을 보유하지 않고 개발 PC에서 작업하는 경우,
C:\Windows\system32\drivers\etc\hosts 파일을 열고
마지막 줄에 다음을 추가한다.

127.0.0.1       www.testdomain.com

이제 웹브라우저를 열고 [www.testdomain.com:포트번호]에 접속하면 된다.

만일 C:\testdomain\ROOT 가 아닌 C:\testdomain 를 룰트 디렉터리로 사용하고자 하는 경우에는
server.xml을 다음과 같이 작성한다.

      <Hostname="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>
      <Host name="www.testdomain.com"  appBase="C:\testdomain"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
    <context path="" docBase="D:\Team_ePro\StrutsPilot"></context>
      </Host>


2. 포트 번호로 분류하는 방법

톰캣에서도 MS의 IIS와 같이 포트 번호에 따라 호스팅하는 것이 가능하다.
TOMCAT_HOME\conf\server.xml 을 열고 아래와 같이 Service 엘리먼트를 추가한다.

  <Service name="testdomain">
    <Connector port="8090" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="testdomain" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
      <Host name="localhost"  appBase="C:\testdomain"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
            <context path="" docBase="C:\testdomain"></context>
      </Host>
    </Engine>
  </Service>

Service 엘리먼트의 name 속성은 추가하려는 컨텍스트의 이름이 되겠다.
첫 Connector 엘리먼트의 port 속성은 사용하려는 포트 번호를 넣으면 된다.
Host 엘리먼트와 context 엘리먼트, appBase에 대한 물리적 경로 생성은 1항의 설명과 같다.

이제 웹브라우저를 열고 [localhost:포트번호]에 접속하면 된다.


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

톰캣 6.0 에서 웹사이트 여러개 운영하기 (2)


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


  # 가상 호스트(Virtual Host)를 이용하는 방법
  # IP Address의 port를 여러개 사용하는 방법


여기서는 가상 호스트를 이용하여 톰캣에서 여러개의 웹사이트를 운영하는 방법에 대해서 설명하고자 한다.
설치 환경은 다음과 같다.


    * O/S : Windows XP (Windows Server 동일)
    * 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

정말 간단하지 않은가?
톰캣 6.0에서 웹사이트 여러개 운영하기 (1)
아파치와 연동없이 톰캣만으로도 하나의 IP로 다수의 웹사이트를 운영하는 것이 가능하다.
(아파치와 톰캣을 연동하는 방법에 대해서는 차후에 자세히 올리도록 하겠다)

특히 개발자의 경우 여러개의 프로젝트를 개발하거나 테스트하고자 할 때 웹사이트를 여러개 운영해야한다. 다수의 웹 사이트를 세팅하는 방법은 크게 2가지가 있다.


    * 가상호스트를 이용하는 방법
    * IP Address의 port를 여러개 사용하는 방법


가상호스트를 이용하는 방법은 도메인을 이용하여 실제로 서비스를 운영하는 경우가 아니면 개발자에겐 별 의미가 없다. 여기서는 두번째 방법인
IP 어드레스의 포트를 이용하는 방법에 대해서 설명하겠다. (바로가기 : 톰캣에서 가상 호스트를 이용하는 방법)
우선 설치 환경은 다음과 같다.


    * O/S : Windows XP (난 아직 리눅스를 잘 모른다. 비슷하겠지만 테스트해보지 않았다)
    * Tomcat 6.0 (정확히는 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

출처 :
http://dbdb.tistory.com/rss

+++++
ROOT 디렉토리의 이름을 바꾸고 싶다면
<Host name="localhost" appBase="d:/dev/myweb">
 <Context path="" docBase="d:/dev/myweb"/> <!-- 추가-->
</Host>



Posted by BAGE