kkamagi's story

IT, 정보보안, 포렌식, 일상 공유

OS

apache 와 tomcat 연동 방법

까마기 2014. 9. 12. 14:58
728x90
반응형

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