mod_jk를 이용한 Apache2 + Tomcat5.5 연동 및 가상호스팅

 

 

내용에 들어가기에 앞서


참고 사이트 : Configuring Tomcat5 and Apache2 with Virtual Hosts using mod_jk

Apache2와 Tomcat5.5등의 설치는 이곳에서 다루지 않습니다.
아파치와 톰캣 각각 어느정도 설정할 수 있다면 이 문서의 내용은 어렵지 않습니다.
개인마다 설정들이 조금씩 다르므로 무작정 똑같이 따라하기 보다는 경로에 주의하며 자신의 설정에 맞게 적용해야 합니다.

톰캣과 연동에 필요한 mod_jk(mod_jk2가 아님)라는 아파치용 모듈을 설치합니다.
모듈을 설치하는 방법은 다양하므로 아파치용 모듈을 설치하고 로드하는 방법은 따로 다루지 않겠습니다.
우분투라면 apt로 간단히 설치할 수 있습니다.

이 문서에서 아파치설정파일, 톰캣, mod_jk의 경로는 아래와 같습니다.
아파치설정파일 : /etc/apache2/
톰캣 : /usr/lib/apache-tomcat
mod_jk : /usr/lib/apache2/modules/mod_jk.so

 

 

 

 

workers.properties 파일 만들기


workers.properties 라는 파일을 적당한 곳에 생성하고 아래와 같은 코드를 넣습니다.
이곳에서는 /etc/apache2/workers.properties 로 생성했습니다.

#아래의 두 설정의 경로는 자신에 맞게 수정합니다.
workers.tomcat_home=/usr/lib/apache-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

 

 

 

 

 

톰캣의 server.xml 수정


톰캣/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" />


톰캣을 재시작 합니다.
$ cd /usr/lib/apache-tomcat/bin
$ ./shutdown.sh
$ ./startup.sh

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

 

 

 

 

 

apache2.conf 수정


/etc/apache2/apache2.conf 설정 파일에 아래의 코드를 추가합니다. 항상 경로에 신중하세요.
Include /usr/lib/apache-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의 내용은 여러가지 설정을 갖고있는 중요한 부분이므로 볼 수 없도록 막아놓습니다.

 

 

 

 

VirtualHost 설정 파일 수정


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

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

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

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

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


 

톰캣의 context 문제점


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

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

JkMount /admin worker1
JkMount /admin/* worker1


 

가상호스팅


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

아파치의 가상호스팅
<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>

 

 

 

 

 

번호 제목 글쓴이 날짜 조회 수
73 [ChatGPT] nginx 에서 jetty 서버로 프록시중 "org.eclipse.jetty.http.BadMessageException: 400: Invalid SNI" 오류 황제낙엽 2024.11.12 1291
72 [phind] jetty 와 tomcat 의 차이점 (성능, 사용성, 선호도) 황제낙엽 2024.10.31 1438
71 jsp 에서 <script> 로 import 한 js 내의 한글이 깨진다 file 황제낙엽 2024.07.14 1481
70 Nginx: 413 – Request Entity Too Large file 황제낙엽 2024.02.17 1187
69 nginx 설치, 실행, SSL 설정, 프록시 설정 황제낙엽 2024.02.04 962
68 [bard] Nginx로 서브 도메인에 따라 내부의 포트만 다르게 실행중인 웹서버들을 라우팅 황제낙엽 2024.02.01 962
67 [Bing] "Apache"와 "Nginx" 의 차이점 황제낙엽 2024.01.31 1055
66 Nginx 에 대하여 황제낙엽 2024.01.18 892
65 "org.apache.tomcat.util.net.SecureNioChannel.getSslEngine()" is null 황제낙엽 2023.06.22 2956
64 windows tomcat 에 Let's Encrypt(SSL) 적용 황제낙엽 2023.06.21 1093
63 AutoSet PHP 버전 업그레이드 (7.2.10 to 7.4.32) 황제낙엽 2022.10.09 1542
62 401 - Unauthorized: Access is denied due to invalid credentials 황제낙엽 2021.08.27 1387
61 iis error - Service Unavailable / HTTP Error 503. The service is unavailable. 황제낙엽 2020.09.23 1739
60 [Bitnami WAMP] 설치후 PHP 설정 황제낙엽 2020.07.23 1631
59 Autoset의 대안 Bitnami WAMP file 황제낙엽 2020.04.01 1034
58 HTTP 오류 403.14 - Forbidden file 황제낙엽 2020.03.04 964
57 바인딩 편집 (사이트 바인딩) file 황제낙엽 2020.03.04 1021
56 웹사이트에서 여러 도메인을 사용하는 방법 황제낙엽 2020.03.04 1387
55 32비트 응용 프로그램 사용 (ASP, C#) file 황제낙엽 2019.10.31 3056
54 [Tomcat 7] org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15 황제낙엽 2019.10.16 1231