톰캣에서 하나의 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의 쓸데없는 주석부분을 다 없애고 관련 부분만 남겨놓으면 아래와 같다.
1 2 3 4 5 6 7 8 9 |
<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개를 만든다. 그리고 이렇게 수정하자.
1 2 3 4 5 6 |
<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의 쓸데없는 주석부분을 다 없애고 핵심부분만 남겨놓으면 아래와 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<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 에 추가한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<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 디렉토리의 이름을 바꾸고 싶다면
1 2 3 |
<Host name="localhost" appBase="d:/dev/myweb"> <Context path="" docBase="d:/dev/myweb"/> <!-- 추가--> </Host> |
또는
톰캣에서 conf 폴더에 있는 server.xml 파일을 수정해야 한다.
다음 코드를 추가한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
<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를 입력하지 않고 위 도메인으로 접근 가능하다.