티스토리 뷰

서버관련

[CentOS] Apache와 Tomcat 연동

가판이 2010. 12. 1. 19:56

 

이 블로그는 http://idkook.tistory.com/34, http://idkook.tistory.com/35 의 글을 참조하여 약간의 내용 추가와 수정을 했습니다.

좋은 블로그를 제공해주신 idkook님게 감사드리며 이 블로그에 문제가 발생할 시 자삭하도록 하겠습니다.

 

목차

1. 개념

2. Java 설치

3. Tomcat 설치

4. Apache Tomcat Connector 설치

 

 

 

1. 개념


(1) Client에서 http, https를 통해 Server에 요청합니다.

(2) Apache는 요청을 받아들여 html일 경우 자신이 처리하고 응답을 해줍니다. JSP, Servlet일 경우 localhost:8080을 통해 Tomcat에게 전달합니다.

(3) Tomcat은 JSP, Servlet을 처리한후 Apache에게 전달합니다.

(4) Apache는 Tomcat에서 받은 응답과 자신의 응답을 Client에게 보냅니다.

 

2.Java 설치

Download Path : http://java.sun.com/javase/downloads/index.jsp

File Name : jdk-6u17-linux-i586.bin

# cd /usr/local/src

# sh jdk-6u17-linux-i586.bin

# mkdir /usr/local/jdk

# mv jdk1.6.0_17 /usr/local/jdk

# ln –s /usr/local/jdk1.6.0._17 /usr/java

 

Java package는 /usr/local/jdk/ 밑에 version 별로 두고 symbolic link로 /usr/java 로 생성합니다. 나중에 Java의 version을 관리할 때 다른 version을 /usr/local/jdk에 둔 뒤에 java의 symbolic link 대상만 변경하면 됩니다. 이는 system 관리자마다 각각 편한 방식으로 사용하면 됩니다.

Java의 환경설정을 별도의 profile을 만들어서 등록합니다.

# touch /etc/profile.d/java.sh

# chmod 755 /etc/profile.d/java.sh

# vim /etc/profile.d/java.sh

 

#!/bin/sh

JAVA_HOME=/usr/java

PATH=$PATH:$JAVA_HOME/bin

export JAVA_HOME PATH

 

이 후에 Java에 의존적인 application에 대한 환경 변수는 java.sh 파일에 추가만 해주면 됩니다. /etc/profile 의 최하단에 설정을 직접 추가할 수도 있겠지만 실제로 /etc/profile.d 밑에 있는 모든 파일을 실행해서 환경변수를 등록하는 스크립트 일 뿐이므로 이 방식이 보다 편한 방법이라고 할 수 있습니다.

이제 저장한 환경변수를 실행해서 등록합니다.

# source /etc/profile.d/java.sh

# env | grep JAVA //JAVA_HOME의 경로가 출력됩니다

# java –version //Java의 version이 출력됩니다.

 

Java 설치는 이것으로 마치겠습니다. 계속해서 Tomcat 설치를 해보겠습니다.

 

3. Tomcat 설치

Download Path : http://tomcat.apache.org/download-60.cgi

File Name : apache-tomcat-6.0.20.tar.gz

# cd /usr/local/src

# wget http://apache.tt.co.kr/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.,0

# tar xvzpf apache-tomcat-6.0.20.tar.gz

# mkdir /usr/local/apache-tomcat

#mv apache-tomcat-6.0.20 /usr/local/apache-tomcat

#cd /usr/local

#ln –s apache-tomcat/apache-tomcat-6.0.20 tomcat

 

/usr/local/apache-tomcat 밑에 tomcat의 소스를 두고 symbolic link로 /usr/local/tomcat 경로로 만들어서 접근합니다. 이렇게 하면 tomcat version을 바꿀때마다 환경설정을 바꿀 필요도 없으면서 현재 설치된 tomcat의 version을 바로 확인할 수 있습니다.

계속해서 tomcat의 시작과 종료 version 확인을 편하게 하도록 service file을 등록하겠습니다

#vi /etc/init.d/tomcat

 

#!/bin/bash

# http Startup script for the Apache Tomcat Server

# chkconfig: - 80 20

# description : Release implementation for Servlet 2.4 and JSP 2.0

# processname : tomcat

# lockfile : /var/lock/subsys/tomcat

# pidfile : /var/run/tomcat.pid

 

# Source function library.

./etc/rc.d/init.d/functions

 

# JAVA의 환경설정을 가져온다

if [ -f /etc/profile.d/java.sh ]; then

./etc/profile.d/java.sh

fi

 

export CATALINA_HOME=/usr/local/tomcat

export PATH=$PATH:$CATALINA_HOME/bin

 

prog=Tomcat

lockfile=${LOCKFILE-/var/lock/subsys/tomcat}

pidfile=${PIDFILE-/var/run/tomcat.pid}

 

#CATALINA_PID file을 지정하면, startup.sh에서 pid를 기록.

Export CATALINA_PID=$pidfile

 

start() {

echo $"Starting $prog:"

$CATALINA_HOME/bin/catalina.sh start

RETVAL=$?

echo

[ $RETVAL=0] && touch ${lockfile}

Return $RETVAL

}

 

stop() {

echo $"Stopping $prog: "

$CATALINA_HOME/bin/catalina.sh stop

RETVAL=$?

echo

[ $RETVAL = 0 ] && rm –f ${pidfile} && rm –f ${lockfile}

}

 

status() {

RETVAL="1"

if[ -f "$CATALINA_PID" ]; then

read kpid < $CATALINA_PID

if checkpid $kpid 2>&1; then

echo "$prog is already running (${kpid})"

RETVAL="0"

else

echo "lock file found but no process running for pid $kpid"

fi

else

pid="$(pgrep java)"

if [ -n "$pid" ]; then

echo "$prog running (${pid}) but no PID exists"

RETVAL = "0"

else

echo "$prog is stopped"

fi

fi

return $RETVAL

}

 

# See how we were called.

case "$1" in

start)

start

;;

 

stop)

stop

;;

 

restart)

stop

sleep 2

start

;;

 

status)

status

;;

 

*)

echo "Usage: $0 {start|stop|restart|status}"

exit 1

esac

 

exit $RETVAL

 

httpd의 시작 script의 내용을 기본으로 해서 살짝 고친 내용입니다. Pid를 status를 이용해서 알 수 있도록 추가했습니다. 아마 pid에 대한 내용은 catalina.sh에서 지원하는 기능을 그대로 추가한 것 뿐이니까 multiprocess에서도 잘 될거라고 생각됩니다. catalina.sh script의 초반 주석을 보면 자신의 구미에 맞게 설정을 바꿀 수 있습니다. 이제 이 script를 service에 등록하고 자동으로 시작되도록 합니다.

 

# cd /etc/init.d

# chmod 755 tomcat

# chown root.root tomcat

# chkconfig –add tomcat

# chkconfig –level 3 tomcat on

# chkconfig –level 5 tomcat on

# service tomcat start

# service tomcat status

 

이것으로 tomcat 설치가 완료되었습니다.

계속해서 apache와 연동에 대해 알아보겠습니다.

 

4. Apache Tomcat Connector 설치

Apache와 Tomcat을 연동하는 방법은 mod_jk를 이용하는 방법과 proxy를 이용하는 방법이 있는데

Mod_jk를 이용한 방법으로 연동하겠습니다.

 

Download Path : http://tomcat.apache.org/connector-doc/

File Name : mod_jk-1.2.28-httpd-2.2.X.so

 

# cd /etc/httpd/modules

# wget http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.28/i586/mod_jk-1.2.28-httpd-2.2.X.so

# ln –s mod_jk-1.2.28-httpd-2.2.X.so mod_jk.so

 

file명에 포함된 version정보를 제거하는건 정말 안좋아합니다. 그렇다고 version이 바뀔때마다 설정 file을 찾아다니면서 바꾸는것도 안좋아합니다. 그래서 version이 포함된 file을 두고 그 file을 symbolic link로 설정하는 방식을 선호합니다.

 

아래 내용을 /etc/httpd/conf/httpd.conf에 추가합니다.

LoadModule jk_module modules/mod_jk.so

 

<IfModule jk_module>

JkWorkersFile conf.d/workers.properties

JkMountFile conf.d/workers_uri.properties

JkShmFile logs/mod_jk.shm

JkLogFile logs/mod_jk.log

JkLogLevel info

JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

</IfModule>

 

httpd.conf에서 SSL Service를 담당하고 있는 VirtualHost Tag 내부에 JkMount를 이용하면 Tomcat의 application 관리 page들을 SSL만을 이용해서 접속할 수 있도록 숨길 수 있습니다.

<VirtualHost *:443>

….

JkMount /manager ajp

JkMount /manager/* ajp

JkMount /host-manager ajp

JkMount /host-manager/* ajp

JkMount /docs ajp

JkMount /docs/* ajp

….

</VirtualHost>

 

Apache에서 처음 welcome page 설정 부분에 jsp 확장자도 추가합니다. 이 부분을 설정하지 않으면 index.jsp page를 web.xml에서만 설정하고 왜 안뜨냐고 투덜대는 자신을 발견 하게 됩니다. 하는 김에 apache의 기본 홈 경로도 /var/www/html에서 Tomcat의 root 경로로 바꿔보겠습니다

DirectoryIndex index.jsp index.html index.html.var

 

#DocumentRoot "/var/www/html"

DocumentRoot "/usr/local/tomcat/webapps/ROOT"

 

workers.properties file도 생성합니다.

# vi /etc/httpd/conf.d/workers.properties

 

worker.list=ajp

worker.ajp.port=8009

worker.ajp.host=localhost

worker.ajp.type=ajp13

worker.ajp.lbfactor=1

worker.ajp.socket_timeout=10

#worker.ajp.cachesize=1 #취향에 따라 선택합니다

 

workers_uri.properties

# vi /etc/httpd/conf.d/workers_uri.properties

 

/*.do=ajp

/*.jsp=ajp

 

Tomcat의 manager page에 접속할 계정을 추가합니다.

# vi $CATALINA_HOME/conf/tomcat-users.xml

 

<tomcat-users>

….

<user name="admin" password="사용할 암호" roles="admin,manager" />

</tomcat-users>

 

Apache를 재시작할 때 mod_jk가 잘 올라오는지 확인할 차례입니다. Apache와 Tomcat을 재시작하고 page에 접속해 봅니다.

# service httpd restart

# service tomcat restart

 

https://localhost page에 접속하면 Apache 시작화면이 아닌 Tomcat의 시작화면이 반겨줍니다. 좌측의 manager link를 click해서 추가한 관리자 계정으로 login까지 된다면 무사히 설정이 완료된겁니다.

 

이것으로서 Apache와 Tomcat의 연동에 대해 알아보았습니다.

 

수고하셨습니다^^