페도라 8 || 톰캣 + 아파치 연동

mod_jk 라는 것을 사용하여 톰캣과 아파치를 연결해 보겠습니다. 톰캣과 아파치는 이미 설치 된 상태에서 진행해 주시길 바랍니다. 또한, 몇몇 차이나는 디렉토리 정보는 스스로 설정하시기 바랍니다.

1. mod_jk 다운로드
http://www.apache.org/dist/tomcat/tomcat-connectors/jk/source/

위 링크에서 최신 mod_jk를 다운로드 합니다.

2. mod_jk 설치
다운로드한 파일을 압축해제 합니다.
$tar -zxvf tomcat-connectors-1.2.28-src.tar.gz
$cd tomcat-connectors-.1.2.28

configure를 설정해야 하는데 그 때 apxs가 필요합니다. apxs가 없다면 다음과 같이 설치합니다.
$yum install httpd-devel
$find / -name ‘apxs’ -print
/usr/sbin/apxs

해당 디렉토리를 다음과 같이 configure에 입력합니다.
$./configure –with-apxs=/usr/sbin/apxs

make를합니다.

$make && make install

3. workeers.properties 파일 만들기

$ vi /usr/local/apache/conf/workers.properties

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

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

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

# vi /usr/local/tomcat/conf/server.xml

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

<Listener
className=”org.apache.jk.config.ApacheConfig”
modJk=”/usr/local/apache/modules/mod_jk.so”
workersConfig=”/usr/local/apache/conf/workers.properties” />

톰캣을 재시작 합니다.

# /etc/init.d/tomcat restart

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

5. httpd.conf 수정
/usr/local/apache/httpd.conf 설정 파일에 아래의 코드를 추가합니다. 항상 경로에 신중하세요.

# vi /usr/local/apache/httpd.conf

# Load mod_jk module
# Update this path to match your modules location
LoadModule jk_module /usr/local/apache/modules/mod_jk.so

# Where to find workers.properties
# update this path to match your conf directory location
JkWorkersFile /usr/local/apache/conf/workers.properties

# Where to put jkshared Memory
JkShmFile /usr/local/apache/logs/mod_jk.shm

# where to put jk logs
JkLogFile /usr/local/apache/logs/mod_jk.log

# Set the jk log level [debug/error/info]
JkLogLevel info

JkLogStampFormat “[%a %b %d %H:%M:%S %Y] “
JkRequestLogFormat “%w %V %T”

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

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

아파치의 가상호스팅

<VirtualHost *:80>
  DocumentRoot /home/test/public_html
  ServerName test.co.kr
  ServerAlias www.test.co.kr
  JkMount  /*.jsp worker1
  JkMount  /*.do worker1

   JkMount  /servlet/* worker1
</VirtualHost>

톰캣의 가상호스팅(server.xml)

# vi /usr/local/tomcat/conf/server.xml

아래 구문을 추가한다.

<Host name=”www.test.co.kr” appBase=”/home/test/public_html”
           unpackWARs=”true” autoDeploy=”true”
           xmlValidation=”false” xmlNamespaceAware=”false”>
</Host>

# cd /usr/local/tomcat/conf/Catalina

# mkdir www.test.co.kr

# cd www.test.co.kr

가상호스트 설정파일을 만든다.
# vi ROOT.xml

아래 내용을 ROOT.xml에 작성한다.
<?xml version=’1.0′ encoding=’utf-8′?>
<Context path=”/” docBase=”” crossContext=”false” reloadable=”true” debug=”0″ />

/*

<Host name=”localhost”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”/” docBase=”/var/www/html” reloadable=”true” />

*/ 위 부분을 이와 같이 하여도 됨.

tomcat 재시작
apache 재시작

7. classpath 설정

가상호스트의 WEB-INF를 인식하지 못하는 경우 /usr/local/tomcat/bin/setclasspath.sh 파일을 아래와 같이 수정

CLASSPATH= 구문 대신 아래 코드를 추가 입력한다.

CLASSPATH=”$CLASSPATH:$CATALINA_HOME/lib/el-api.jar:$CATALINA_HOME/lib/servlet-api.jar:$CATALINA_HOME/lib/jsp-api.jar”

home_root=’/home’
cd $home_root

for home_name in $(ls)
   do
       if [ -d “$home_root/$home_name/public_html/WEB-INF/classes” ] ; then
          CLASSPATH=”$CLASSPATH:$home_root/$home_name/public_html/WEB-INF/classes”
       fi
       if [ -d “$home_root/$home_name/public_html/WEB-INF/lib” ] ; then
          CLASSPATH=”$CLASSPATH:$home_root/$home_name/public_html/WEB-INF/lib”
       fi
done

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/lib
export LD_LIBRARY_PATH

class.jsp 파일을 다음과 같이 작성하여 classpath 확인

<%@page contentType=”text/html; charset=euc-kr”%>
<%=System.getProperty(“java.class.path”)%>

Leave a Reply