You cannot see this page without javascript.

아파치 - 톰캣 연동하기 (PHP, JSP 같이 사용하기)

Server 조회 수 2012 추천 수 0 2014.05.19 20:31:59

아파치에 PHP 모듈이 등록되어 있고, JSP를 사용하기 위해 톰캣이 설치되어 있다고 가정한 후 설명한다. 아파치와 톰캣을 연동하기 위해서는 mod_jk.so 모듈을 아파치에 등록한 후 톰캣이 필요한 경우 톰캣에 요청 처리를 위임하는 방법으로 동작한다. mod_jk.so 모듈을 아파치에 등록하면 URL 요청을 분석하여 해당 URL에 톰캣에서 지정한 경우 톰캣에서 요청을 위임 받아 처리하는 방법이다.

 

 

설치 환경

Apache 2.2 버전  /  Tomcat 6.0 버전

 

설치 방법은 두 가지가 있다.

1. 톰캣 auto-configure 방식

2. 아파치 httpd.conf 설정 파일에 직접 모듈을 등록하는 방법 

 

 

 

* mod_jk.so 파일 다운로드

 

 위의 사이트로 접속한 후 해당 운영체제를 선택한다. so 파일을 다운로드 할 때 아파치 서버의 버전을 확인하고 해당 아파치 서버 버전의 so 파일을 다운로드해야 한다. 아파치 서버 버전이 다른 so 파일은 모듈을 등록해도 아파치 서버가 읽지 않는다. 이 때 아파치 서버는 "The requested operation has failed" 에러를 출력한다. 에러 로그를 볼 때는 아파치의 "test configure" 실행파일을 실행하면 된다.

 

 

 

1. 톰캣 auto-configure 방식

 

 톰캣 ${톰캣 경로}/conf/server.xml  파일을 열어 <Engine ... ></Engine>태그 사이에 다음과 같이 모듈을 등록한다.

 

<Engine name="Catalina" defaultHost="localhost">

    <Listener className="org.apache.jk.config.ApacheConfig" modJk="C:/server/Apache2.2/modules/mod_jk.so"/>
</Engine>

 

 <Listener> 태그를 추가한 후 톰캣을 다시 실행한다. 톰캣을 다시 실행한 후 " ${톰캣 경로}/conf/ "에 /auto 와 /jk 디렉토리가 생성된다. /auto 디렉토리에서 mod_jk.conf 파일을 /jk 디렉토리로 복사한다.

 

 

mod_jk.conf 파일 내용

########## Auto generated on Mon Apr 05 15:05:08 KST 2010##########

<IfModule !mod_jk.c>
    LoadModule jk_module "C:/server/Apache2.2/modules/mod_jk.so"
</IfModule>


<VirtualHost localhost>
    ServerName localhost

    JkMount /manager ajp13
    JkMount /manager/* ajp13

    JkMount /docs ajp13
    JkMount /docs/* ajp13

    JkMount /examples ajp13
    JkMount /examples/* ajp13

    JkMount /host-manager ajp13
    JkMount /host-manager/* ajp13
</VirtualHost>

 

 mod_jk.conf 파일을 보면 요청 URL의 매핑을 정의하고 있다. 매핑 URL 주소 뒤에 ajp13이라는 값은 리다이렉트시 어떤 톰캣 컨터이너를 선택하는가를 결정하는 것이다. ajp12는 톰캣 3버전이고 ajp13은 톰캣 4버전~5버전까지이다. 앞의 URL 값이 들어온다면 리다이렉트 시킨다는 것이다.

 

 

톰캣을 재 시작한 후 아파치 설정 파일 수정 ( mod_jk.so 파일을 아파치에 등록 )

${아파치 경로}/conf/httpd.conf

 

아파치 설정 파일의 맨 마지막에 생성된 mod_jk.conf 설정 파일을 등록

<IfModule ssl_module>
    SSLRandomSeed startup builtin
    SSLRandomSeed connect builtin
</IfModule>

 

Include C:servertomcat-6.0.26confjkmod_jk.conf

 

 모듈을 등록했으면 아파치를 다시 시작한다. 이 때 에러가 발생하지 않고 정상적으로 동작한다면 아파치와 톰캣은 연동이 된 것이고 mod_jk.conf 파일에서 지정한 URL값으로 들어오는 요청은 톰캣 컨테이너가 처리하게 된다.

 

worker.properties  파일 작성 ( ${톰캣 경로}/conf/jk )

## workers.properties register ##

workers.tomcat_home = C:servertomcat-6.0.26
workers.java_home = C:serverJavajdk1.6.0_19

 

worker.list = ajp13
worker.ajp13.port = 8009
worker.ajp13.host = localhost
worker.ajp13.type = ajp13

 

/*.jsp = worker1

 

톰캣과 아파치를 재 시작하여 제대로 연동이 되었나 확인해 본다.

 

 

 

 이 때 루트 경로를 공유하고자 할 경우가 있다. 즉, 아파치 PHP 루트 경로와 톰캣 JSP 루트 경로를 같이 사용하여 .php 일 경우 PHP 루트 경로를 기준으로 문서를 요청할 수 있고 .jsp 인 경우 톰캣의 루트 경로를 기준으로 문서를 요청할 수 있게 만들고 싶다면아파치 웹 서버의 루트 경로를 .jsp 톰캣의 루트 경로를 지정해야 하며 mod_jk.conf 파일에 jk 모듈을 사용하지 않을 시 경로를 지정해 주어야 한다.

 

# All URL goes to tomcat except the one containing /home
  <VirtualHost *:80>
      ServerName testxxx.mysys
      DocumentRoot /www/testxxx/htdocs

  # Use SetEnvIf to st no-jk when /home/ is encountered
      SetEnvIf Request_URI "/home/*" no-jk

  # Now /home will goes to /home/dataxxx/
      Alias /home /home/dataxxx/

      <Directory "/home/dataxxx">
          Options Indexes MultiViews
          AllowOverride None
          Order allow,deny
          Allow from all
      </Directory>

      JkMount /* myssys-xxx

  </VirtualHost>

 

 즉, jk 모듈을 사용하는 모듈을 기본 문서 루트로 잡고 jk모듈을 사용하지 않는 경우(PHP)는 가상으로 문서를 요청하게 해야 한다.

 

엮인글 :
List of Articles
번호 제목 글쓴이 날짜 조회 수

XE Login