By Gal Shachor <shachor@il.ibm.com>
Trans By Kenu <heogn@shinbiro.com>
mod_jk 는 이전의 mod_jserv의 대치용입니다. Tomcat 과 Apache 를 연동하는 아주 새로운 Tomcat-Apache plugin 입니다.
여러 이유:
새롭고 단순한 설치기법을 알 필요가 있겠죠. 이 기법을 알게된다면 IIS나 Netscape 같은 웹서버에 Tomcat을 연동할 때 아주 쉽게 할 수 있을 것입니다.
이 문서에서 사용되는 단어들의 뜻은 다음과 같습니다:
용어 |
의미 |
---|---|
Worker process |
worker는 웹서버로부터의서블릿 요청을 처리하기 위해 동작하는 tomcat 인스턴스입니다. 대부분 하나의 worker 가 있습니다(하나의 유일한 tomcat process).그러나 때로는 load 밸런싱이나 site 파티셔닝을 위해 여러개의 worker를 띄우게 됩니다. 각각의 worker 는 자신이 자리잡은 호스트, 열려있는 포트, 메시지 교환에 사용되는 통신프로토콜에 의해 웹서버에서 구분되어집니다. |
In process worker |
특별한 worker입니다. 다른 프로세스에 상주하고있는 Tomcat process 와 동작하는 대신, 웹서버가 JVM을 열어서 웹서버 process 주소 공간에서 Tomcat을 내부적으로 실행합니다. 이 문서에서는 다루지 않는 내용입니다. |
Web server plugin/tomcat redirector |
Tomcat이 다른 웹서버와 함께 운영될 때 웹서버에 설치해서 웹서버로 들어오는 servlet 요청을 Tomcat으로 보내는 역학을 합니다. 웹서버 플러그인이고, 이 문서에서는 웹서버플러그인으로 mod_jk를 소개합니다. 이 전송자는 서버에 플러그인 되기 위해 DLL(win32) / shared object(linux) 모듈 형태로 되어 있습니다. |
Plugin configuration |
여러 다른 Tomcat worker가 동작할 경우 요청이 어느 곳으로 전달되야 할 지 구분하기 위해 웹서버플러그인을 설정할 필요가 있습니다. 로그레벨 같은 몇가지 내부 파라미터에 수반된 이 정보가 플러그인 설정을 구성합니다. |
Web server configuration |
각각의 서버는 어떻게 동작하는지 정의해주는 설정을 가지고 있습니다. 예를 들면 어느 포트를 사용하는지, 어떤 파일을 보낼지, 어떤 웹서버 플러그인을 불러와야 되는지 등등이죠. Tocmat 전달자를 불러와 사용하기 위해 웹서버 설정을 수정해주어야합니다. |
설치순서는 다음과 같습니다:
Apache에 mod_jserv가 설치되었다면, httpd.conf 파일에서 ApJServMount 지시자를 모두 제거합니다. 만일 tomcat-apache.conf 나 tomcat.conf를 포함하고 있다면 요 줄도 지워줍니다. 이것은 mod_jserv에 맞춰져 있습니다.
Visual C++ Ver.6.0으로 만듭니다. 직접 만들기 위해서는 이게 깔려있어야 됩니다.
순서는 다음과 같습니다.:
이것은 배포판과 디버그버전을 모두 만듭니다(mod_jk).
다른 방법: mod_jk.dsp 파일을 msdev에서 열어서 build 메뉴로 만들어도 됩니다.
apxs -o mod_jk.so -DSOLARIS -I../jk -I/usr/java/include -I/usr/java/include/solaris -c *.c ../jk/*.c시스템별로 잘 되겠지만, 만일 "symbol "fdatasync" not found" 에러가 날 때가 있습니다. 수정하려면, -lposix4 를 -c 앞에 추가해 주시면 됩니다.
apxs -o mod_jk.so -I../jk -I/usr/local/jdk/include -I/usr/local/jdk/include/linux -c *.c ../jk/*.c소스 디렉토리가 아닌 ../jk 디렉토리에서 나온 objects 파일들이 현재 디렉토리에 컴파일되기 때문에 실패할 수도 있습니다. 그 때는 gcc -shared -o mod_jk.so *.o 를 돌려서 build 를 마쳐야 합니다.
이미 servlet.xml 파일은 이 부분과 유사한 8007포트를 사용하는 Ajp12 connections 을 포함하고 있습니다(mod_jserv 에 의해 전달됨). Ajp13만 사용하고 싶어도, Ajp12 커넥터를 지우지 마시죠(?) - Tomcat의 shutdown에 필요하댑니다.<Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.connector.Ajp13ConnectionHandler"/> <Parameter name="port" value="8009"/> </Connector>
대부분 단순한 경우 Tomcat은 Apache에 필요한 환경설정 파일들을 생성합니다. Tomcat 이 구동할 때 Apache 를 위해 TOMCAT_HOME/conf/mod_jk.conf-auto 파일을 자동으로 생성합니다. 우리가 할 일은 단지 이 파일을 httpd.conf 파일에 다음과 같이 한줄을 첨가하는 것 뿐입니다.
"Include TOMCAT_HOME/conf/mod_jk.conf-auto"
Ok, 이제 Tomcat 과 Apache를 시작하면 Apache서버에서 Tomcat에 접근할 수 있습니다.
특별한 경우, 예를 들면 기본값이 아닌 URL prefixes 마운팅 시에 이 파일을 커스터마이즈된 설정의 기반으로 삼고, 다른 파일 이름으로 저장합니다. Apache를 직접 관리한다면 새로운 컨텍스트가 추가될 때마다 Apache를 Update해야합니다.
Tomcat 3.2: 새 context 를 추가한 뒤에 tomcat과 apache 모두 재시작해야합니다; Apache는 재시작해야만 변화된 설정값이 적용됩니다.
또한, TOMCAT_HOME/conf/mod_jk.conf-auto 파일은 tomcat이 시작할 때 생성되므로, Apache를 시작하기 전에 Tomcat을 시작해야합니다. Tomcat은 매번 새로 시작할 때마다 TOMCAT_HOME/conf/mod_jk.conf-auto 파일을 덮어씁니다.
Worker는 TOMCAT_HOME/conf/workers.properties 파일로 설정됩니다. workers.properties howto 문서에는 상당한 분량의 정보가 있고, 먼저 알고 있어야 합니다. 그러나, 급하시다면 workers.properties 파일을 편집하고 workers.tomcat_home, workers.java_home 파일과 시스템에 맞는 ps 변수값들을 세팅하지 않아도 됩니다.
mod_jk를 사용하기 위한 Apache 설정법은 Apache 서버 설정 지시자를 통해 이루어진다; 시작하려면 자동 생성된 Tomcat 의 conf 폴더에 있는 mod_jk.conf-auto 파일을 본다.
LoadModule jk_module libexec/mod_jk.so AddModule mod_jk.c JkWorkersFile /usr/local/jakarta-tomcat/conf/workers.properties JkLogFile /usr/local/apache/logs/mod_jk.log JkLogLevel warn
mod_jk의 JkMount 지시자를 사용해 지정된 URL 들을 Tomcat으로 할당할 수 있습니다. 일반적으로 JkMount 지시자의 구조는 다음과 같습니다:
JkMount <URL prefix> <Worker name>
예를 들어 다음의 지시자들은 .jsp로 끝나는 요청들이나 /servlet 으로 시작하는 모든 요청들은 "ajp13" worker로 보냅니다. 그러나 /otherworker 에 있는 .jsp 요청은 "remoteworker" 로 보냅니다.
httpd.conf 파일에서 JkMount 지시자를 Top레벨 이나 <VirtualHost> 섹션 내부에 둠으로 사용할 수 있습니다.JkMount /*.jsp ajp13 JkMount /servlet/* ajp13 JkMount /otherworker/*.jsp remoteworker
끝났습니다! 이제 Tomcat과 apache를 시작함으로 두 서버가 동작하면서 서블릿과 JSP 파일들을 돌릴 수 있습니다.
Here's an example configuration which probably reflects many real-world setups. A site is using Tomcat and Apache with two virtual hosts (one of them using HTTPS as well, which we're assuming is being handled by mod_ssl).
URLs ending in .jsp and beginning with /servlet are handled by Tomcat, the rest are handled by Apache. The files for each Host are server out of /web/host1 and /web/host2 respectively.
The example are over-simplified and incomplete but should get you started. Also note the virtual host setup is new in Tomcat 3.2 - this example won't work with Tomcat 3.1.
. . <Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.connector.Ajp12ConnectionHandler"/> <Parameter name="port" value="8007"/> </Connector> <Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.connector.Ajp13ConnectionHandler"/> <Parameter name="port" value="8009"/> </Connector> <Host name="host1.apache.org"> <Context path="" docBase="/web/host1" debug="0"/> </Host> <Host name="host2.apache.org"> <Context path="" docBase="/web/host2" debug="0"/> </Host> . . |
# Setup for Solaris system # workers.tomcat_home=/usr/local/jakarta-tomcat workers.java_home=/usr/java ps=/ worker.list=ajp12, ajp13 # Definition for Ajp13 worker (Ajp12 left to readers imagination) # worker.ajp13.port=8009 worker.ajp13.host=localhost worker.ajp13.type=ajp13 |
# Load mod_jk # LoadModule jk_module libexec/mod_jk.so AddModule mod_jk.c # Configure mod_jk # JkWorkersFile /usr/local/jakarta-tomcat/conf/workers.properties JkLogFile /usr/local/apache/logs/mod_jk.log JkLogLevel warn # First Virtual Host. # <VirtualHost 10.0.0.1:80> DocumentRoot /web/host1 ServerName host1.apache.org JkMount /*.jsp ajp13 JkMount /servlet/* ajp13 </VirtualHost> # Second Virtual Host. Also accessible via HTTPS # <VirtualHost 10.0.0.2:80> DocumentRoot /web/host2 ServerName host2.apache.org JkMount /*.jsp ajp13 JkMount /servlet/* ajp13 </VirtualHost> <VirtualHost 10.0.0.2:443> DocumentRoot /web/host2 ServerName host2.apache.org SSLEngine On JkMount /*.jsp ajp13 JkMount /servlet/* ajp13 </VirtualHost> |
A. Tomcat 의 소스 배포판을 받아서 직접 컴파일(build)해야 합니다. 자세한 내용은 이 섹션을 참고하세요
A. Ajp13 은 새로운 프로토콜이고, 빠릅고, SSL과도 잘 동작합니다. You almost certainly want to use that. There is more information in the workers.properties howto document
A. Ajp13 프로토콜은 Tomcat과 Apache 사이에서 오픈 소켓을 유지합니다. Tomcat을 재시작할 때 Apache도 역시재시작해줘야 합니다.
A. The workers.properties howto 문서에는 여기보다 상당히 고급 수준의 정보가 있습니다. 한번볼만 합니다. 또는 "mod_jk" 메일링 리스트에 가입하거나 mod_jk 소스를 직접 분석하는 것이죠.
This document was created by Gal Shachor, and was revised by Mike Bremford with help from the countless many on the tomcat-dev and tomcat-user lists!
Copyright ⓒ1999-2000 The Apache Software Foundation |