본문 바로가기
Tech/Applications

Apache Tomcat 연동하기

by 타이호 2017. 12. 24.
반응형

Tomcat만 단독으로 웹 서비스를 제공 할 수 있지만, 이중화, LB, Virtual Host 설정 등 다양하게 쓸 수 있어 Apache와 연동을 많이 한다.

참 오랜만에 apache, tomcat, db 구성을 다시 해보고 있는데, 이번기회에 정리를 해본다

 

1. 준비사항

  • apache : 2.4
  • tomcat7
  • apache-tomcat connector : mod_jk ( http://mirror.apache-kr.org/tomcat/tomcat-connectors/jk/ 에서 소스 다운 후 빌드)

2. 설치

  • apache : os에 맞게 apt or yum으로 설치 한다.
  • tomcat7 : http://mirror.apache-kr.org/tomcat/tomcat-7/v7.0.81/ 여기에서 받아서 압축을 풀면 된다.
  • mod_jk : 위에서 받은 소스를 가지고 naive 디렉토리 아래에서 ./configure --with-apxs=/<apxs위치> 한 후 make && make install
  • apxs가 없는 경우 설치한다. httpd-devel을 설치하면 대충 해결된다.

3. 설정

  • 크게 보면 apache에서 mod_jk 모듈을 올리고 해당 tomcat에 해당하는 worker를 마운트 하는 방식이다.
  • 기본 설정으로 tomcat역시 웹 서비스를 띄우는데 (예) 8080으로 접속) apache를 통해 접속을 할 예정이기 때문에 tomcat의 웹 서비스들은 주석 처리해도 무방하다.

3.1 Apache 설정

a. httpd.conf (centos기준) 수정


LoadModule jk_module modules/mod_jk.so

<IfModule mod_jk.c>
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkShmFile logs/mod_jk.shm
</IfModule>

.......................

<VirtualHost *:80>

ServerAdmin webmaster@test.com
DocumentRoot /test/webapps
ServerName www.kangtaeho.com
ServerAlias kangtaeho.com
JkMount /* kang1

</VirtualHost>


위와 같이 mod_jk를 올리고 virtual host아래에 해당 worker (kang1)을 마운트 하는 방식이다.

worker는 mod_jk설정을 보면 workers.properties에 정의한다.

b. workers.properties


worker.list=kang1,kang2

worker.kang1.host=www.kangtaeho.com
worker.kang1.type=ajp13
worker.kang1.port=8009

worker.kang2.host=www.kangtaeho2.com
worker.kang2.type=ajp13
worker.kang2.port=8019


3.2 Tomcat 설정

위에서 여러개의 tomcat instance가 동작한다고 가정하고, apache에서 해당 톰캣의 ajp 포트를 정의한다. 위의 worker인 kang1, kang2는 tomcat의 jvmRoute로 구성되니 동일하게 설정해야 한다. 추후 Tomcat에서 정의하겠지만 각각의 tomcat instance의 ajp 포트는 다르게 설정해야 한다.

a. Tomcat A conf/server.xml 설정


<Server port="8005" shutdown="SHUTDOWN">

...........................

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="utf-8" />

<Engine jvmRoute="kang1" name="Catalina" defaultHost="www.kangtaeho.com">

.............

<Host name="www.kangtaeho.com" appBase="/test"
unpackWARs="true" autoDeploy="true" >
<Context path="" reloadable="true" docBase="webapps" />


b. Tomcat B conf/server.xml 설정


<Server port="8015" shutdown="SHUTDOWN">

...........................

<Connector port="8019" protocol="AJP/1.3" redirectPort="8453" URIEncoding="utf-8" />

<Engine jvmRoute="kang2" name="Catalina" defaultHost="www.kangtaeho2.com">

.............

<Host name="www.kangtaeho2.com" appBase="/test2"
unpackWARs="true" autoDeploy="true" >
<Context path="" reloadable="true" docBase="webapps" />


위와 같이 각각의 Tomcat의 설정에 다른 포트를 설정하고 apache에서 설정한 worker를 jvmRoute에 넣어준다.

c. conf/web.xml : UTF-8을 사용하기 위해 아래 항목을 주석 제거한다. : filter와 filter-mapping 2개의 항목이 있다.

<filter-name>setCharacterEncodingFilter</filter-name>

d. bin/startup.sh 과 shutdown.sh에 export CATALINA_HOME=<tomcat이 설치된 directory> 를 넣어준다.

e. 이 부분은 기존의 다른 was를 톰캣으로 마이그레이션 하는 과정에서 나온 부분이다. JNDI로 설정을 하게 되면 tomcat의 server.xml에서 아래 db정보를 넣어줘야 한다.


<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource name="jdbc/<DB이름>" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@<db_ip>:<port>:<name>" username="<user>" password="<password>" maxActive="50" maxIdle="2" maxWait="-1"/></GlobalNamingResources>


f. context.xml에도 아래를 추가한다.
<ResourceLink global="jdbc/<DB이름>" name="jdbc/<DB이름>" type="javax.sql.DataSource"/>

g. oracle jdbc driver를 톰캣의 lib/ 아래에 복사한다. oracle ojdbc5.jar or ojdbc6.jar 파일은 oracle이 설치된 곳에 있다.

4. 실행

  • 톰캣 instance는 각각의 tomcat directory/bin아래의 startup.sh를 실행한다.
  • 해당 ajp port가 정상적인지 확인하고, apache를 구동한 뒤 위의 virtual host에 설정된 주소로 들어가면 확인 할 수 있다.

 

반응형