기본적인 내용은 http://www.howtoforge.com/apache2_tomcat5_mod_jk에 있으며, 위의 페이지를 기본으로 하여 번역하였음을 밝힌다.
또한 virtual host가 없는 상태에서 이루어졌으며, debian 3.1 기반에서 테스트 되었으므로 다른 플랫폼에서의 동작은 보장할 수 없다.
[계속해서 보기]
1. Apache2 설치하기
* 참조 링크 : http://www.howtoforge.com/perfect_setup_debian_sarge_p5
아래와 같이 apache2를 설치한다.
apt-get install apache2 apache2-doc
apt-get install libapache2-mod-php4 libapache2-mod-perl2 php4 php4-cli php4-common php4-curl php4-dev php4-domxml php4-gd php4-imap php4-ldap php4-mcal php4-mhash php4-mysql php4-odbc php4-pear php4-xslt curl libwww-perl imagemagick
/etc/apache2/apache2.conf 파일을 아래와 같이 수정한다.
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml
의 부분을 아래와 같이 바꾼다.
DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl index.xhtml
/etc/mime.types 파일을 편집하여 아래의 줄들을 주석 처리한다.
#application/x-httpd-php phtml pht php
#application/x-httpd-php-source phps
#application/x-httpd-php3 php3
#application/x-httpd-php3-preprocessed php3p
#application/x-httpd-php4 php4
/etc/apache2/mods-enabled/php4.conf 파일을 편집하여 아래의 줄들을 주석 처리한다.
<IfModule mod_php4.c>
# AddType application/x-httpd-php .php .phtml .php3
# AddType application/x-httpd-php-source .phps
</IfModule>
/etc/apache2/ports.conf 파일을 편집하여 443 포트를 Listen 하도록 추가한다.
Listen 80
Listen 443
이제 몇몇 apache module 들을 활성화 시킨다.
a2enmod ssl
a2enmod rewrite
a2enmod suexec
a2enmod include
Apache를 재시작한다:
/etc/init.d/apache2 restart
새로운 사용자 www-data가 자동적으로 시스템상에 생성될 것이다. (제대로 생성되지 않았다면 adduser를 통해 생성시켜 주도록 한다)
2. JDK (Java Development Kit) 설치하기
Tomcat을 실행하기 위해서는 JDK를 설치한 다음 시스템상의 JDK 위치를 인식할 수 있도록 JAVA_HOME 환경 변수를 설정해 주어야 한다. 여기에서는 JDK 5.0이 사용되었다.
* JDK 1.6.0을 사용하여도 큰 문제는 없는 것으로 알고 있다.
1. 다음의 주소에서 JDK 5.0을 다운받는다 : http://java.sun.com/j2se/1.5.0/download.jsp
2. Download JDK 5.0 Update 6 버튼을 눌러서 다운로드 페이지로 간다.
3. Accept 버튼을 눌러서 라이선스 동의서를 승인한다.
4. Linux self-extracting file을 선택한다. 이는 rpm이 아닌 자동 압축 풀림 형태의 파일을 다운로드 할 것이다.
5. 원하는 디렉토리를 선택한다. 그리고 해당 디렉토리로 이도하여 아래와 같이 권한을 설정한다:
chmod +x jdk-1_5_0_06-linux-i586.bin
이제 파일을 실행한다:
./jdk-1_5_0_06-linux-i586.bin
이제 jdk1.5.0_06이라는 새로운 디렉토리를 볼 수 있을 것이다. 이 디렉토리를 실행되어야 할 위치에 이동시킨다. 나의 경우에는 /usr/lib/ 를 선택하였다.
mv jdk1.5.0_06 /usr/lib
이제 아래 명령어를 통해 JAVA_HOME을 가르키는 jdk라는 심볼릭 링크를 생성한다. 이렇게 하면 필요할 때 마다 쉽게 다른 jvm들 사이를 전환하는 것이 가능하다.
cd /usr/lib
ln -s jdk1.5.0_06 jdk
이제 JAVA_HOME 환경 변수를 설정할 필요가 있다. 다음 문장을 /etc/profile 파일의 export PATH 문장 바로 다음에 추가한다.
JAVA_HOME="/usr/lib/jdk"
export JAVA_HOME
/etc/profile 파일은 시스템을 기동할 때와 사용자가 시스템에 접속할 때 수행된다. 따라서 환경 설정을 업데이트 하기 위해서 한 번 로그아웃 했다가 다시 로그인 하도록 하라.
아래의 명령어를 통해 JAVA_HOME이 제대로 정의되었는지 확인한다. 이는 Java SDK의 위치(여기에서는 /usr/lib/jdk)를 반환하여야 한다.
echo $JAVA_HOME
3. Tomcat 설치하기
이 장에서는 Apache Tomcat 5.5.16을 다운로드하고 설치하게 될 것이다. 이때, 소스로부터 패키지를 빌드하지 않고 그냥 바이너리 버전을 다운로드하도록 한다.
1. 다음 주소를 참고하여 바이너리 버전을 원하는 디렉토리에 다운로드 받도록 한다 : http://tomcat.apache.org/download-55.cgi
이 때 원하는 5.5.16의 코어 섹션에서 tar.gz를 선택한다.
2. 원하는 디렉토리로 이동하고 아래의 명령어를 통해 파일을 푼다:
cd /mydownloads #(다운받은 디렉토리로 이동하면 된다.)
tar xvzf apache-tomcat-5.5.16.tar.gz
이제 당신은 apache-tomcat-5.5.16이라 불리는 새로운 디렉토리를 가지게 되었다. 이 디렉토리를 설치할 디렉토리로 이동하도록 한다. 다시, 나는 여기에서 /usr/lib/을 선택하였다. 이 위치는 Tomcat 문서 내의 CATALINA_HOME으로 참조될 것임에 유의하도록 하라.
mv apache-tomcat-5.5.16 /usr/lib
4. /usr/lib/ 디렉토리로 이동한다.
cd /usr/lib
5. 이제 CATALINA_HOME을 가르키는 apache-tomcat라는 이름의 심볼릭 링크를 생성한다.
ln -s apache-tomcat-5.5.16 apache-tomcat
이는 Tomcat을 업그레이드 하거나 원하는 때에 startup 및 shutdown 스크립트를 실행하고자 할 때 시스템 상에 설치된 Tomcat 버전들 간에 원활하게 전환할 수 있도록 도와줄 것이다.
이제 CATALINA_HOME/bin 디렉토리에서 Tomcat을 start 및 stop 할 수 있게 되었다. 만약 bash가 아닌 다른 쉘을 사용하고자 한다면 명령어의 앞에 sh 커맨드를 붙여야 할 것이다. 이제 Tomcat을 시동하고 브라우저를 열어 http://localhost:8080 을 입력하면 Tomcat이 제대로 동작하는지 확인할 수 있을 것이다. 8080 포트는 Tomcat의 기본 포트이고, /usr/lib/apache-tomcat/conf/server.xml 파일을 수정함으로서 쉽게 변경할 수 있다.(이 파일은 추후 수정하도록 할 것이다) 만약 이 페이지를 원격에서 접속하고자 한다면, 라우터 내 서버의 IP 주소를 개개의 포트에 forward하는 것을 잊지 않도록 하라. 이제 Tomcat 문서와 예제 JSP/Servlet 스크립트들을 링크하는 Tomcat welcome 페이지를 볼 수 있을 것이다. 페이지 내의 몇몇 예제들을 실행하여 Tomcat이 제대로 동작하는지 확인하도록 하라.
cd /usr/lib/apache-tomcat/bin
./startup.sh
서버를 중지시키기 위해서는 아래의 며령어를 수행하면 된다. 당분간 Tomcat을 동작시킬 필요가 없으므로, 아래 명령을 수행해봐도 상관없다.
./shutdown.sh
4. mod_jk의 설치 및 설정 mod_jk
Tomcat과 Apache를 연결시키기 위해 mod_jk connector를 다운로드하고 설치할 필요가 있다. Apache 문서를 보면 각 리눅스 배포판에 대한 적절한 mod_jk 패키지 버전을 추천하고 있을 것이다. 많은 오래된 resource들이 mod_jk2 connector를 설치하라고 조언하고 있으나, 이는 이미 폐기된 것이고 또한 mod_jk가 mod_jk2 이전에 개발되었음에도 여전히 안정적으로 지원되고 있다.
Mike Milson은 mod_jk 를 Tomcat Apache에 연동하는데 사용하는 몇가지 이유를 제시하였다 (다음 링크 참조) http://www.meritonlinesystems.com/docs/apache_tomcat_redhat.html
1. 다음 Apache 아카이브에서 최신 소스를 다운받는다 (최신버전을 확인할 것) : http://archive.apache.org/dist/jakarta/tomcat-connectors/jk/source/jk-1.2.15/
다운로드한 jakarta-tomcat-connectors-1.2.15-src.tar.gz 파일을 /usr/src/ 디렉토리로 옮기도록 한다.
2. /usr/src 디렉토리로 변경한다.
cd /usr/src
3. 다음으로 아래와 같이 압축을 푼다.
tar xvzf jakarta-tomcat-connectors-1.2.15-src.tar.gz
4. /usr/src/jakarta-tomcat-connectors-1.2.15-src/jk/native 디렉토리로 이동한다.
cd jakarta-tomcat-connectors-1.2.15-src/jk/native
5. 이제 당신의 시스템에 맞는 커스텀 configure를 생성할 때가 되었다. 아래 명령을 수행한다:
./buildconf.sh
이는 /usr/src/jakarta-tomcat-connectors-1.2.15-src/jk/native 디렉토리 내에 설정 파일을 생성할 것이다.
6. mod_jk를 당신의 시스템에 맞게 설정하기 위해 다음 명령을 시행한다.
* 중요 : 이 때 apxs2((APache eXtension tool)가 시스템에 설치되어 있어야 한다. 만약 없다면, www.debian.org에서 apache2-threaded-dev 패키지를 다운받아 설치하면 된다. (이는 이전의 apache-dev package를 교체한다)
* 중요 : 최신 버전의 apache2에서는 apxs2가 기본적으로 포함되어 있으니 먼저 확인해보기 바란다. 아파치 설치 디렉토리 내의 bin 디렉토리에 있을 것이다. (즉 /etc/apache2/bin 내에)
configure 명령을 수행할 때 정확한 apxs2의 위치를 참조하도록 한다.
./configure --with-apxs=/usr/bin/apxs2
7. 이제 mod_jk 를 아래와 같이 빌드한다.
make
8. 마지막으로 위의 명령어가 성공적으로 수행되었다면, 새로 생성된 mod_jk.so 파일을 Apache2 모듈 디렉토리에 복사한다. 나의 경우에는 /usr/lib/apache2/modules 가 되었다.
cd apache-2.0
cp /usr/src/jakarta-tomcat-connectors-1.2.15-src/jk/native/apache-2.0/mod_jk.so /usr/lib/apache2/modules
이제 Apache와 Tomcat을 설정할 다음 단계로 넘어갈 준비가 완료되었다. mod_jk connector에 대한 보다 자세한 설명은 http://tomcat.apache.org/connectors-doc/howto/apache.html 를 참조하기 바란다.
5. Tomcat 및 Apache 설정
workers.properties 파일을 생성한다.
* 중요 : 설정 파일을 수정하기 전에 백업 카피를 만들어 두는 것을 잊지 말라.
workers.properties 파일은 어떻게 각 프로세스가 Tomcat에 연결되어 ajpv13 프로토콜로 통신하는지를 worker를 통해 정의한다. 원한다면 Worker HowTo 를 참조하여 보면 보다 자세한 정보를 얻을 수 있다.
1. 우선 Apache2 루트에 workers.properties 파일을 생성한다.
touch /etc/apache2/workers.properties
2. 다음으로 workers.properties 파일을 열고 아래를 추가한다. 아마 인터넷에서 많은 workers.properties 파일에 대한 예제를 찾을 수 있을 것이지만, 아래의 예제가 이 tutorial에서 가장 잘 동작하는 것으로 보인다.
workers.tomcat_home=/usr/lib/apache-tomcat
workers.java_home=/usr/lib/jdk
ps=/
worker.list=worker1
worker.default.port=8009
worker.default.host=localhost
worker.default.type=ajp13
worker.default.lbfactor=1
3. 저장하고 파일을 닫는다.
4. 이제 /etc/apache2/apache2.conf 파일을 열어 맨 끝에 아래의 줄을 추가할 필요가 있다.(httpd.conf 는 그냥 하위 호환성을 위해 제공되는 파일이다.)
LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so
# Where to find workers.properties
JkWorkersFile /etc/apache2/workers.properties
# Where to put jk logs
JkLogFile /var/log/apache2/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# 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"
# Send servlet for context / jsp-examples to worker named worker1
JkMount /jsp-examples worker1
# Send JSPs for context /jsp-examples/* to worker named worker1
JkMount /jsp-examples/* worker1
# Send JSPs for context *.jsp to worker named worker1
JkMount /*.jsp worker1
파일을 저장하고 닫는다.
이제 최종 보안 포인트 차례이다.
tomcat이라는 유저와 그룹을 아래와 같이 만든다:
groupadd tomcat
useradd -g tomcat tomcat
그리고 Tomcat path의 user와 gorup을 변경한다:
chown -R tomcat:tomcat /usr/lib/apache-tomcat-5.5.16
tomcat user의 암호를 변경하려면 root 권한에서 아래를 실행한다.
passwd tomcat
그리고 지시를 따른다.
그러면 Tomcat 서버를 시작하고 정지하기 위해서는 아래와 같이 tomcat user를 사용하면 된다.
su - tomcat
이제 Tomcat을 중지하고 시동한다:
cd /usr/lib/apache-tomcat/bin
./shutdown.sh
./startup.sh
그리고 Apache를 재시작한다:
/etc/init.d/apache2 restart
여기까지 하면 종료된 것이다.
5-1. 시험하기
이 때 /jsp-examples 혹은 *.jsp 로 시작되는 모든 URL은 tomcat으로 directing 된다.
실제로는 오직 JSP나 servlet만 JK worker에 direct 되면 된다.
이 때 기본 Tomcat port인 8005, 8009, 8080에는 다른 서버가 동작하지 않도록 한다.
또한 Apache port인 8080 혹은 80에 다른 서버가 동작하지 않도록 한다.
[중요] 항상 Tomcat을 먼저 시동하고 그 다음에 Apache를 시동한다.
문제가 생겼다면 Apache를 먼저 shutdown 하고 restart 한 다음에 Tomcat을 재시작한다.
- Apache 시작 : http://localhost
- 기본 Tomcat page : http://localhost:8080
- Tomcat examples : http://localhost/jsp-examples
6. 추가적인 작업
6-1. jsp servlet setting
jsp servlet의 경우 내부적인 캐쉬가 있어 개발자가 파일을 컴파일해 올린 다음에 브라우저에서 불러보면 예전 것이 불려 나오는 경우가 종종 있다.
아래의 파일을 수정하면 이러한 내부 캐쉬를 끌 수 있으며, 약간의 성능 저하가 있다. 하지만 프로그램을 개발하고자 하는 용도라면 아래 옵션을 수정하는 편이 좋을 것이다.
1. /usr/lib/apache-tomcat/conf로 이동한다.
cd /usr/lib/apache-tomcat/conf
2. context.xml 파일을 열어 다음 부분을 수정한다.
<Context>
이 부분을
<Context reloadable="true">
으로 수정한다.
6-2. jsp와 apache의 디렉토리를 동일하게 만들기
1. /etc/apache2/httpd.conf 파일을 열고 DocumentRoot 부분을 아래를 수정한다. 원래의 DocumentRoot 내용은 주석 처리한다.
DocumentRoot "/usr/lib/apache-tomcat/webapps/ROOT"
그리고 다음 부분도 아래와 같이 수정한다.
<Directory "/usr/lib/apache-tomcat/webapps/ROOT">
2. 마지막으로 tomcat과 apache를 재시동하면 된다. 대신 추후의 모든 소스 작업을 /usr/lib/apache-tomcat/webapps/ROOT 에서 하여야 한다. 확장자가 jsp이면 자동으로 Java servlet으로 인식되게 된다.
7. References and paths
* Tomcat conf:
/usr/lib/apache-tomcat/conf/server.xml
* Tomcat stop and start:
cd /usr/lib/apache-tomcat/bin
./shutdown.sh
./startup.sh
* Apache modules:
/usr/lib/apache2/modules
* Apache conf:
/etc/apache2/workers.properties
/etc/apache2/apache2.conf
/etc/apache2/httpd.conf
* Apache2:
/etc/init.d/apache2 restart
/etc/init.d/apache2 stop
/etc/init.d/apache2 start
Copyright (c) 2006 Fernando Chebair
Permission is granted to copy, distribute and/or modify the content of
this page under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is available at http://www.gnu.org/licenses/fdl.html
Posted by Sunghwan


