apache 와 tomcat 연동 방법
1. tomcat connector(mod_jk)를 사용하는 방법 -> 예전이 사용하던 방법
2. mod_proxy를 사용하여 reverse proxy 기능을 사용하는 방법
3. mod_proxy_ajp 를 사용하여 AJP Protocol을 reverse proxy 로 사용하는 방법
출처 : http://lesstif.com/pages/viewpage.action?pageId=12943367
# /usr/local/apache/bin/apachestl -V
# /usr/local/tomcat/bin/version.sh
--> apache, tomcat version 확인
1. tomcat-connectors download
# cd /usr/loca/src
# wgethttp://archive.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.37-src.tar.gz
# tar xvfz tomcat-connectors-1.2.37-src.tar.gz
# cd tomcat-connectors-1.2.37-src/native/
# ./buildconf.sh
# yum install autoconf
# yum install libtool
# ./configure --with-apxs=/usr/local/apache/bin/apxs
# make && make install
# find / -name mod_jk.so
* /usr/local/apache/modules 안에 mod_jk.so 파일 생성
만약 apache가 rpm으로 설치되어있어서 tomcat-connector 컴파일경로가 ./configure --with-apxs=/usr/sbin/apxs 일 경우 mod_jk.so 위치를 찾아서 /etc/httpd/modules 로 복사해 준다.
# cd /usr/local/apache/conf
# cp httpd.conf httpd.conf.bak
2. httpd.conf 설정
# vi /usr/local/apache/conf/httpd.conf
# vi /etc/httpd/conf/httpd.conf
LoadModule jk_module modules/mod_jk.so //jk_module 추가
<IfModule jk_module>
JkWorkersFile conf/workers.properties //workers.properties 경로 지정
JkMountFile conf/uriworkermap.properties
JkShmFile logs/mod_jk.shm
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S % Y]"
</IfModule>
JkMount /*.jsp ajp13 ---------> VirutalHost 설정시 추가 해주어야 연동이 된다.
<Directory /> -----> 웹 소스 디렉터리 지정
Options FollowSymLinks
AllowOverride None
</Directory>
일반적으로 http://localhost/ 로 들어왔을때 ROOT가 되는 부분이 바로 DocumentRoot이다.
그리고 JkMount 란 /(루트) 의 JSP 요청이 들어오면 tomcat1(worker.properties에서 정의)이 그 해당 요청을
Tomcat 에게 보내는 역할을 한다. jk는 *.jsp를 보내는 것이 아니라 /*.jsp 에 대한 URL만 Tomcat에
넘기기에 Apache와 Tomcat의 ROOT를 같게 해두는 것이 좋다.
===========================================================================================
mod_jk.conf 파일 생성하여 할 경우
# vi /usr/local/apache/conf/mod_jk.conf
1 <IfModule mod_jk.c>
2 # where to find workers.properties
3 JkWorkersfile conf/workers_jk.properties
4
5 # where to put jk shared memory
6 #JkShmFile /usr/local/tomcat/run/mod_jk.shm
7
8 # where to put jk logs
9 #JkLogFile logs/mod_jk.log
10 JkLogFile /usr/local/tomcat/logs/mod_jk.log
11
12 # set the jk log level [debug/error/info]
13 JkLogLevel info
14
15 # select the timestamp log format
16 JkLogstampFormat "[%a %b %d %H:%M:%S %Y]"
17
18 ## url pattern 에 따른 connector mapping
19 ## JkMountFile conf/uriworkermap.properties
20 #JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
21 #JkRequestLogFormat "%w %V %T"
22 </IfModule>
# cat /usr/local/tomcat/conf/server.xml | grep 8009
89 <!-- Define an AJP 1.3 Connector on port 8009 -->
90 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
========================================================================
3. workers.properties 파일 설정
- apache와 tomcat을 연동하기 위해서는 workers.properties 파일을 설정해야 한다.
- $Apache_Home/conf/workers.properties 파일을 아래 예제와 같이 생성한다.
- workers.properties 파일은 일반적으로 httpd.conf 파일과 같은 디렉터리에 위치하게 설정한다.
# vi /usr/local/apache/conf/workers.properties //파일이름은 임의
# Start setup file
#
#worker.tomcat_home=/usr/local/tomcat // 변경 될 수 있음
#worker.java_home=/usr/local/java // 변경 될 수 있음
ps=/
worker.list=ajp13 // list 이름으로 맵핑한다. -> 여기서는 ajp13으로 설정해주었으니 ajp13으로 맵핑
# Definition for Ajp13 worker
#
worker.ajp13.port=8009 // tomat server.xml 파일 AJP/1.3 Connector의 Port 입력
worker.ajp13.host=localhost // tomcat server 호스트 (localhost가 아닐 경우에 웹 사이트 주소 입력, 특정 VirutalHost에 연결하고 자 할 때는 그 주소를 입력)
worker.ajp13.type=ajp13 // apache + tomcat 통신 프로토콜
worker.ajp13.lbfactor=1
worker.ajp13.connection_pool_timeout=600
worker.ajp13.socket_keepalive=1
#
# End setup file
- ※참고 Tomcat Worker
- 톰캣 워커는(Tomcat worker) 웹서버로부터의 서블릿 요청을 톰캣 프로세스(Worker)에게 전달하여 요청을 처리하는 톰캣 인스턴스이다.
- 대부분 하나의 worker를 사용하나, load 밸런싱이나 site 파티셔닝을 위해 여러개의 worker를 사용 할 수 있다.
- 워커 타입에는 ajp12, ajp13, jni, lb 등이 있다.
# cp workers.properties workers.properties.bak //백업 받기
# vi uriworkermap.properties //파일 이름은 임의
--> 예를 들어 jsp 파일 열때
/*.jsp=ajp13
/*.do=ajp13
# vi /usr/local/apache/htdocs/index.jsp //아파치 디폴트 경로에 index.jsp 생성
1 <%@ page import="java.util.*"%>
2 <html>
3 <title>tomcat-apache</title>
4 <body bgcolor="#FFFFFF">
5 <font size=2>
6 <%
7 for (int i=0;i<100;i++){
8 out.println("Hello World !"+i+"--"+ new Date() + "<br>");
9 }
10 %>
11 </font>
12 </body>
13 </html>
# vi /usr/local/apache/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
40 DocumentRoot "/usr/local/apache/htdocs"
41 Servername localhost
42 JkMountFile conf/uriworkermap.properties
43 JkMount /*.jsp ajp13 //URL 중 jsp로 오는 Request 만 Tomcat에서 처리함, ajp13은 workers.properties에서 등록한 worker 이름
JkMount /*.do ajp13
JkMount /servlet/* ajp13 // servlet 예제 실행을 위해서 추가
44 <Directory "/usr/local/apache/htdocs">
45 Options Indexes FollowSymLinks
46 AllowOverride None
47 Order allow,deny
48 Allow from all
49 </Directory>
50 </VirtualHost>
=======================================================================
# vi /usr/local/tomcat/conf/server.xml
122 <Host name="localhost또는 해당 웹 주소" appBase="/usr/local/apache/"
123 unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
124 <Context Path="" docBase="htdocs" debug="1" allowLinking="true" reloadable="true" />
=======================================================================
** tomcat VirtualHost 설정 시 중요한 부분중 하나가 appBase, docBase 부분이다.
Tomcat 6.0 에서는 다음과 같이 적용된다.
간단하게,
<Host> 태그의 appBase를 변경해주거나,
<Host> 태그 내에 <Context> 태그를 추가해주면 된다.
우선 톰켓이 기본적으로 보고 있는 루트 컨텍스트는 tomcat 설치경로/webapps/ROOT
96: <Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
appBase는 ${catalina-home} 밑의 상대경로를 인자로 받으며,
기본적으로 보안과 context의 통일적인 적용을 이유로 Context의 루트는 ROOT 디렉토리 밑이 된다.
따라서, 톰켓이 설치가 되면 웹루트는 ${catalina-home}/webapps/ROOT 가 되는 것이다.
1. webapps 자체를 웹 루트 디렉토리로 만들고 싶을 때,
단지, <Host> 태그 내에 아래와 같은 컨텍스트를 추가.
<Context path="" docBase="." reloadable="true"/>
사실 컨텍스트는 더 많은 옵션이 있으나 여기는 최소한의 사항만 적었습니다. 실서버에 적용할 때는 log 부분도 신경을 써주셔야 합니다. 더 자세한 사항은 웹을 검색해 보시기 바랍니다.
2. webapp/test/ROOT를 웹 루트 디렉토리로 만들고 싶을 때,
96: <Host name="localhost" appBase="webapps/test"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
3. 특정디렉터리 및 virtualhost를 사용하는 경우 해당 디렉터리를 웹 루트 디렉토리로 만들고 싶을 때,
96: <Host name="localhost" appBase="d:/env/home/my"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="." reloadable="true"/>
</Host>
또는,
96: <Host name="localhost" appBase="d:/env/home/"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="my" reloadable="true"/>
</Host>
Context 를 빼먹으면 ROOT를 자동으로 웹루트로 쓴다는 것을 기억하셔야 합니다.
p.s.> 톰켓 5.0부터 추가적인 context는 server.xml에 추가하지 않고,
각 웹어플리케이션 디렉토리 별로 META-INF 밑에 context.xml을 추가하게 됩니다.
웹루트를 appBase와 같이 하려면 이의 설정을 server.xml에서 설정해도 무방한 것 같습니다만,
webapps를 루트로 쓰는 것은 특별한 경우가 아니면 지양하는 게 좋으며,
꼭 필요하다면 apache의 redirect를 쓰는 방법 등으로 해결할 수도 있습니다.
# /etc/init.d/httpd restart
# /etc/init.d/httpd graceful
# /etc/init.d/tomcat stop
# /etc/init.d/tomcat start
또는
/usr/local/apache/bin/apachectl graceful
/etc/init.d/tomcat6 restart
<적용 상태 확인>
http://ServerIP/index.jsp -> apache tomcat 페이지 -> 정상적으로 연동 된 상태
또는 http://virtualhost주소/index.jsp 로 테스트
감사합니다.
'OS' 카테고리의 다른 글
Bind 설정 파일 (0) | 2014.09.12 |
---|---|
tomcat 버전 정보 확인 (0) | 2014.09.12 |
Tomcat 8 설치 (0) | 2014.09.12 |
Apache 동시 접속자 수 확인 (0) | 2014.09.12 |
Apache Permission 문제 (403 Forbidden error) (2) | 2014.09.12 |