* 개요
이 문서는 80포트만이 열린 네트워크 환경에서 아파치(80포트)와 톰캣(8080포트)을 동시에 서비스 하기 위한

방법을 설명하고 있습니다.


* 시스템사항
Operating System: Ubuntu 9.04
Webserver: Apache 2.0.54
JDK: JDK 6.0
Servlet Container: Tomcat 6.0.18
Tomcat Connector: Jakarta Tomcat Connector mod_jk (not mod_jk2)


* 기본폴더
apache2 : /etc/apache2
tomcat_home : /usr/local/tomcat
java_home : /usr/lib/jvm/java-6-sun/
mod_jk : /usr/lib/apache2/modules/mod_jk.so


* 설정 순서

1. mod_jk 설치
2. workers.properties 파일 만들기
3. 톰캣의 server.xml 수정
4. apache2.conf 수정
5. VirtualHost 설정 파일 수정
==== 이하 Option ====
6. 톰캣의 context 문제점 해결방법
7. 가상호스팅


* 설정설명
1. mod_jk 설치

$ sudo apt-get install libapache2-mod-jk



2. workeers.properties 파일 만들기


$ sudo vi /etc/apache2/jk/workers.properties


#아래의 두 설정의 경로는 자신에 맞게 수정합니다.
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/lib/jvm/java-6-sun/

ps=/

#아래 반복되는 worker1 대신 다른 이름도 상관없습니다.
worker.list=worker1

worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=worker1

worker.inprocess.type=jni
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)tomcat.jar
worker.inprocess.cmd_line=start
worker.inprocess.jvm_lib=$(workers.java_home)$(ps)jre$(ps)lib$(ps)
i386$(ps)classic$(ps)libjvm.so

worker.inprocess.stdout=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stdout
worker.inprocess.stderr=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stderr



3. 톰캣의 server.xml 수정
톰캣/conf/server.xml 에 아래의 코드를 추가합니다.


$ su vi /usr/local/tomcat/conf/server.xml



Server 태그 바로 아래쪽에 Listener 태그가 적힌곳에 추가하면 됩니다.
modjk와 workersConfig의 경로에 주의해서 자신에 맞게 수정합니다.

<Listener className="org.apache.jk.config.ApacheConfig" modJk="/usr/lib/apache2/modules/mod_jk.so" workersConfig="/etc/apache2/workers.properties" />



톰캣을 재시작 합니다.


$ su /etc/init.d/tomcat restart


에러없이 재시작 되면 아래와 같은 파일이 생성됩니다.
/usr/local/tomcat/conf/auto/mod_jk.conf


4. apache2.conf 수정
/etc/apache2/apache2.conf 설정 파일에 아래의 코드를 추가합니다. 항상 경로에 신중하세요.


$vim /etc/apache2/apache2.conf


Include /usr/local/tomcat/conf/auto/mod_jk.conf
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"

# Globally deny access to the WEB-INF directory
<LocationMatch '.*WEB-INF.*'>
AllowOverride None
deny from all
</LocationMatch>



위의 코드에서 LocationMatch '.*WEB-INF.*' 부분이 중요합니다.
jsp에서 WEB-INF의 내용은 여러가지 설정을 갖고있는 중요한 부분이므로 볼 수 없도록 막아놓습니다.


5. VirtualHost 설정 파일 수정
이 문서는 /etc/apache2/sites-available/default 파일에 VirtualHost가 설정되어 있습니다.
파일을 열어보면 <VirtualHost *> 부분이 있습니다.


$ vi /etc/apache2/sites-available/default



이 부분의 DocumentRoot를 수정합니다.(경로주의)
DocumentRoot /usr/local/tomcat/webapps/ROOT

그리고 아래의 코드를 VirtualHost 태그사이에 추가해줍니다.(worker1에 주의)

JkMount /*.html worker1
JkMount /*.swf worker1
JkMount /*.jsp worker1



JkMount는 패턴에 해당하는 파일 또는 디렉토리를 톰캣이 처리하도록 하는 설정입니다.

파일을 저장하고 아파치를 재시작 합니다.
브라우저에서 http://127.0.0.1로 접속했을때 톰캣 페이지가 보이면 연동된 것입니다.


6. 톰캣의 context 문제점 해결방법
톰캣의 context가 문제가 될 수 있습니다.
컨텍스트의 경로는 DocumentRoot의 하위디렉토리인 것이 아니기 때문입니다.
아파치의 Alias 설정을 통해 문제를 해결 할 수 있습니다.
톰캣의 admin을 예로 들면 아래와 같습니다.

Alias /admin/ "/opt/tomcat/server/webapps/admin/"

JkMount /admin worker1
JkMount /admin/* worker1



7. 가상호스팅
아파치, 톰캣 각각의 가상호스팅 설정에 대해서 자세히 다루지는 않겠습니다.
아파치, 톰캣 두개의 가상호스팅 설정이 일치해야 연동에 문제가 없습니다.

아파치의 가상호스팅
<VirtualHost test.ani>
DocumentRoot /var/www/test
JkMount /*.jsp worker1
</VirtualHost>

톰캣의 가상호스팅(server.xml)
<Host appBase="/var/www/test" name="test.com">
<Context path="" docBase="" debug="0" reloadable="true"/>
</Host>

, .

이번에는 Tomcat의 설정파일 server.xml에 대해 알아보기로 한다.

■ server.xml에 의한 Tomcat의 기본 설정

$CATALINA_HOME/conf/server.xml은 Tomcat의 메인 설정 파일로 Tomcat 기동시에 참조 된다.

$CATALINA_HOME/conf/ 디렉토리에는 디폴트 server.xml 이외에 최소한의설정만으로 구성된

server-minimal.xml이 준비되어 있다. 새로 서버를 설정하고자 할 경우에는 server-minimal,xml의 이름을 변경하여 사용하면 편리하다.

■server.xml의 구조

Tomcat은 몇개의 구성요소로 이루어져 있으며, server.xml에서는 XML의 요소를 통해 구성요소를 정의하고있다. server.xml의 요소는 다음과 같이 트리구조를 갖고 있다.

<Server>

|

+---<Service>

|

+---<Connector>

|

+---<Engine>

|

+---<DefaultContext>

|

+---<Realm>

|

+---<Logger>

|

+---<Host>

|

+---<Context>

|

+---<Value>

|

+---<Realm>

|

+---<Logger>

상위의 속성은 자동적으로 하위의 요소에 계승된다. 예를 들어 <Host>의 구성요소 <Logger>의 속성은 아무것도 지정하지 않은 경우 <Engine>의 구성요소 <Logger>의 설정이 사용된다. 변경이 필요한 경우에는 <Host>의 구성요소 <Logger>에 별도의 설정을 함으로서 상위의 설정을 덮어 쓸수 있다.

1. <Server>요소

Tomcat 서버 구성요소의 정의 부분이다. 기본값은 <Server port="8005" shutdown="SHUTDOWN"> 로 되어 있으며, 포트 8005를 감시하고 shutdown 명령어를 접수하도록 설정되어 있다. 서버에서는 복수의 서비스를 관련 지울 수 있다.

2. <Service>요소

<Service> 구성요소를 정의하고 있다. <Service>는 뒤에 기술 할 <Engine>과 그것에 관련된 모든<Connector>를 그룹화 한 것이다. 기본값은<Service name="Catalina">로 되어 있다.

name 속성에서 Catalina 라고 하는 이름으로 서비스가 정의 되어 있고, 에러 로그 및 관리툴은 이 이름으로 식별합니다.하나의 서버에 복수의 서비스를 정의하는 경우, 다른 name 속성을 기입할 필요가 있다.

<Service>는 <Engine>과 하나 이상의 <Connector>를 관련짓는 것이 가능하다. <Service>와 <Engine>의 관계는 1:1 이다.

3. <Service>요소

<Engine>은 servlet 컨테이너의 인스턴스를 표시하며, <Connector>로부터 보내진 요구를 처리한다. 기본값은 <Engine name="Catalina" defaultHost="localhost">로 되어 있다.

name 속성은 <Engine>의 이름을 표시하며, 에러 로그 및 관리툴은 이 이름으로 <Engine>을 식별한다.

defaultHost 속성은 server.xml에 정의 되어 있지 않은 <Host>에 요구가 있을 경우 발송되는 가상호스트를 지정한다. <Engine>에는 하나 이상의 <Host>가 관련지어져 있다.

4. <Connector>요소

요구를 <Engine>에 건네 주는 역할을 하는것이 <Connector>다. <Service>는 하나 이상의 <Connector>를 갖을 필요가 있다.

사용자는 HTTP 또는 HTTPS/SSL등 여러가지 방법으로 <Engine>에 요구를 보낸다.이것들의 접속 요건의 처리는 <Connector>구성요소에 맡겨진다. 각 프로토콜에 대해 복수의 <Connector>를 갖는 것으로서어떤 접속에서 요구가 보내져와도 <Engine>이 동일하게 처리하고, 응답을 <Connector>에 맡길 수 있다.

Tomcat에는 몇개의 표준 <connector>가 탑재되어 있으며, 기본값은 HTTP 1.1 <Connector>와 AJP <Connector>가 준비되어 있다.

5. <DefaultContext>요소

모든 <Context>공통의 정의부. 기본적으로는 설정되어 있지 않다.

6. <Realm>요소

<Realm>는 보안을 위해 role명과 사용자명, 비밀번호의 맵핑을 외부의 데이타베이스로 부터 가져오는 장치다. Tomcat은 UserDataBase, Memory, JDBC, JNDI등 몇개의 <Realm>을 가지고 있다.

각 <Realm>의 차이는 어디로 부터 정보를 가져왔는가의 차이밖에 없다. 기본값으로는 UserDataBsase이외의 <Realm>은 주석 처리되어 무효로 되어 있다.

7. <Logger>요소

<Logger>는 로그파일의 작성 방법을 설정 한다. <Logger>는 server.xml 구조에서 보듯이 <Engine>레벨에서 설정할 수 있다.

<Logger className="org.apache.catalina.logger.FileLogger">
prefix="server-log." suffix=".txt"
timestamp="true"/>

위의 <예>에서는 Tomcat의 FileLogger 클래스를 사용, prefix, suffix, timestamp 속성에서 로그파일명을 정의하고 있다. 이 경우, 로그파일은 [server-log.2008_08_04.txt]과 같은 형식으로 $CATALINA_HOME/logs 디렉토리에 출력된다.

8. <Host>요소

<Engine>에 관련된 가상호스트를 정의 한다. 기본값으로는 다음과 같이 되어 있다.

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

가상 호스트명을 "localhost"로 설정하고 appBase 속성에서 어플리케이션이 탑재되어 있는 디렉토리를 "webapps"로 설정하고 있다. 별도로 unpackWARs 속성에서는 WAR파일을 전개하고나서 실행할 것인지의 여부를, autoDeploy 속성에서는 Tomcat이 기동중에웹어플리케이션을 배치한 경우에 자동으로 읽어 들일 것인지의 여부를 설정할 수 있다.

9. <Value>요소

<Value>는 Tomcat 특유의 기능이다. <Value>는 상위 구성요소로의 필터 처리를 담당한다. <Engine>, <Host>, <Context>와 관련짓는 것이 가능하다. 또, Tomcat에는 표준으로 다음과 같은 몇개의 <Value>가 준비되어 있다.

AccessLogValue

<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="server-log-" fileDateFormat="yyyy-MM-dd" suffix=".txt"/>

RemoteAccessValve

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127.0.0.1,192.168.0.1" />

SingleSignOnValue

<Valve className="org.apache.catalina.authenticator.SingleSignOn"/>

RequestDumpValue

<Valve className="org.apache.catalina.valves.RequestDumperValve"/>

AccessLogValue 의 <예>에서는 $CATALINA_HOME/logs 디렉토리에 server-log-2008-08-04.txt 의 형식으로 로그파일을 작성한다.

RemoteAccessValue는 접근을 IP주소 단위로 제한한다. 지정주소에서의 접근을 허가, 거부를 설정할 수 있다. <예>에서는 로컬 IP주소 192.168.0.1로 부터의 접근을 허가하고 있다. 또 RemoteHostValue를 사용하면 호스트 단위로 접근제한을 설정할 수 있다.

SingleSignOnValue는 요구와 응답의 헤더와 쿠키를 <Logger>로 설정한 로그파일이 작성된다.

10. <Context>요소

<Host>에는 웹어플리케이션의 복수개의 <Context>가 관련지어져 있다. <Context>요소에는 웹어플리케이션의 일련의 설정 프로퍼티가 들어간다. 웹어프리케이션 배치에서 소개 한대로 이 설정은 웹어플리케이션마다에 설정파일을 가질 수 있다.

Tomcat설정과 관련된 자세한 내용은 Tomcat 홈페이지에서 확인하시기 바랍니다.

, .

Apache Tomcat 설정

Web 2009. 3. 12. 14:32

(1) c:/Tomcat5.5/conf/server.xml 파일 열기

▼ (2) 98번째줄 disableUploadTimeout="true" 뒷부분에 URIEncoding="euc-kr" 추가해줄것




(3) 209번째줄
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> 이 부분을
바로 위쪽에 복사 붙여 넣기 후 뒷부분에 </Host> 추가. name을 ip 주소로 변경

(4) 120번 라인에
<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> 이 부분에
reloadable="true" 추가
<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" reloadable="true"/>

(5) C:/Tomcat5.5/conf 폴더 아래에 209번째줄 name에 썼던 아이피 주소와 같은 이름의 폴더를 만들어 준다.


(6) 만든 폴더 안에 C:/Tomcat5.5/conf/Catalina/localhost/manager.xml를 복사하여 붙여넣고
파일 이름을 ROOT로 변경해준다.
파일 이름을 꼭대문자로 해줄 것

(7) ROOT.XML 파일을 열어서 주석을 모두 삭제. context 부분만 남겨둔 후 context를 아래와 같이 수정.
<Context path="" docBase="C:/Tomcat5.5/mysite" reloadable="true">
</Context>



(8) tomcat을 stop 했다가 다시 start 한다.

[출처] Apache Tomcat 설정|작성자 lbiryu

, .

TOMCAT SERVLET MAPPING

Web 2009. 3. 12. 09:37

tomcat - web.xml

<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/sevlet/*</url-pattern>
</servlet-mapping>

서블릿 매핑에 대한 web.xml 구분입니다.

- 100라인 주석해제 (또는 115라인이다.)

<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

- 340라인 주석해제(또는 366라인)

<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>

Context 추가 (기본 경로를 변경 할 경우 - 추가는 잘 모르겠음...)

  • C:\Tomcat 5.5\conf\Catalina\localhostROOT.xml (반드시 대문자)파일 추가
  • ROOT.xml에 작성된 내용이 이 사이트의 루트 디렉터리이다.
  • ROOT.xml 의 내용은 아래 내용을 복사해 넣는다. (path 는 일단 상관없다. 먼지 머르겠다.)

<?xml version='1.0' encoding='utf-8'?>
<Context crossContext="true" docBase="C:\Documents and Settings\l\My Documents\my\Study_JSP" path="" reloadable="true">
</Context>

추가하는 방법 : 서비스이름.xml로 위의 파일을 만들면된다.

- server.xml에 다음부분을 추가만 했다.

<Host name="localhost" appBase="webapps"

unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">

<Context docBase="d:/Java/MyJSP" path="/MyJSP" reloadable="true"/>

context BaseDoc 설정하기

기본은 conf > server.xml 에 추가

넷빈은 conf/Catalina/localhost/ 안에 각각의 서비스명으로 xml 파일 만들고 그 안에 각각의 context BaseDoc 설정

[출처] 톰캣설치 및 서블릿 세팅하기|작성자 없음

    만약 모든 요청을 8080 대신 HTTP의 기본 포트인 80으로 서비스하고 싶다면

    TOMCAT_HOME/conf/server.xml 파일을 다음과 같이 수정하고 톰캣을 재시작해야 한다.

    다음을 <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->

    <Connector className="org.apache.catalina.connector.http.HttpConnector" port="8080" minProcessors="5" maxProcessors="75" acceptCount="10" debug="0"/> 에서

    <!-- Define a non-SSL HTTP/1.1 Connector on port 80 -->

    <Connector className="org.apache.catalina.connector.http.HttpConnector" port="80" minProcessors="5" maxProcessors="75" acceptCount="10" debug="0"/> 로 변경하자.

    [출처] 톰캣 사용하기 III - 톰캣(tomcat) 설치와 설정|작성자 웃음바다

    tomcat - server.xml

    설치 후위 파일을 열어 220라인에 다음을 추가

    <Context docBase="d:/Java/MyJSP" path="/MyJSP" />

    파일 변경시톰캣 리로드 안하게 설정하려면 아래와 같이 true를 추가 ( 단, 성능은 좀 떨어지게 된다.)

    <Context docBase="d:/Java/MyJSP" path="/MyJSP" reloadable="true"/>

    [3-6-1] content.xml

    대상파일 : tomcat 설치 폴더 안의 conf 폴더 안에 있는 content.xml

    XML 파일 수정 전

    XML 파일 수정 후

    content.xml 안의 Context 안에 reloadable="true"를 입력

    [3-6-2] web.xml

    대상파일 : tomcat 설치 폴더 안의 conf 폴더 안에 있는 web.xml

    CTRL+F나 편집 - 찾기에서 invoker로 검색

    제일 위의 사각형은 invoker 검색시 첨 나오는 단어, 아래의 2가지 사각형은

    이xml 파일에서 수정해야 될 내용이며 이 2가지를 지워준다.

    삭제 후 web.xml 의 내용

    편집 - 이동 메뉴를 통해 366번째 줄로 이동.

    366번째 줄과 371번째 줄에 있는 주석을 지워준다. 지우기 전

    지운 후 화면 web.xml 설정 완료



    , .