APAHCE-TOMCAT 연동/host별로 서로 다른버전의 톰캣으로 연동하기

Yeeees, I can!·2022년 9월 13일
0

아파치와 톰캣 연동 하는 방법에 대해 작성하였습니다.
구성정보
OS : Centos 7 (docker)
APACHE : 2.4.6(yum 패키지 설치)
Tomcat : 8.5.82 ,9.0.65, 10.0.23 버전 각각 연동 테스트
Tomcat Connector : JK-1.2.48
JAVA : java-1.8.0-openjdk (yum 패키지 설치)

★Virtual host 별로 각기 다른 버전의 tomcat 을 이용하도록 설정.
3개 톰캣을 구동할 예정이므로, 각 톰캣 포트는 중복되지 않도록 변경.
Ver 8.5.82 => 8005,8080, ajp 8009
Ver 9.0.65 => 18005,18080,ajp 18009
Ver 10.0.23 => 28005,28080,ajp 28009

1.tomcat 연동에 필요한 파일 다운로드

https://tomcat.apache.org/index.html

2.tomcat의 server.conf수정

Tomcat 8.5.82 / server.conf
ajp포트 부분이 주석처리 되어있으므로, 주석제거.
    <Connector protocol="AJP/1.3"
               address="127.0.0.1" ##로컬에서만 붙어서 사용예정이므로 공인IP가 아닌 로컬호스트로 지정한다
               port="8009"
               secretRequired="false" ##해당값도 추가합니다., ajp포트 연결시 비밀키를 요구하지 않도록 하는 설정입니다.
               redirectPort="8443" />

tomcat 9.0.65 / server.conf

<Server port="8005" shutdown="SHUTDOWN>"
=>Server port="18005" shutdown="SHUTDOWN" #변경
<Connector port="8080" protocol="HTTP/1.1>"
=><Connector port="18080" protocol="HTTP/1.1>" #변경
    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443" />
               ==> #변경
                   <Connector protocol="AJP/1.3"
               address="127.0.0.1"
               port="18009"
               secretRequired="false" 
               redirectPort="18443" />

tomcat 10.0.23 / server.conf

<Server port="8005" shutdown="SHUTDOWN>"
=>Server port="28005" shutdown="SHUTDOWN" #변경
<Connector port="8080" protocol="HTTP/1.1>"
=><Connector port="28080" protocol="HTTP/1.1>" #변경
    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443" />
               ==> #변경
                   <Connector protocol="AJP/1.3"
               address="127.0.0.1"
               port="28009"
               secretRequired="false" 
               redirectPort="28443" />

이제 각각의 톰캣을 구동 진행 후 netstat정보를 확인할 경우 아래와 같이 확인할 수 있습니다.
각 버전별로 프로세스가 각각 활성화되었으며, 서로다른 포트로 사용

tcp        0      0 0.0.0.0:28080           0.0.0.0:*               LISTEN      3466/java           
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      2888/java           
tcp        0      0 127.0.0.1:18005         0.0.0.0:*               LISTEN      3043/java           
tcp        0      0 127.0.0.1:18009         0.0.0.0:*               LISTEN      3043/java           
tcp        0      0 0.0.0.0:18080           0.0.0.0:*               LISTEN      3043/java           
tcp        0      0 127.0.0.1:28005         0.0.0.0:*               LISTEN      3466/java           
tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN      2888/java           
tcp        0      0 127.0.0.1:28009         0.0.0.0:*               LISTEN      3466/java           
tcp        0      0 127.0.0.1:8009          0.0.0.0:*               LISTEN      2888/java           

3.JK connetor 설치하여 아파치와 연동

JK connector를 다운로드 후 압축해제.
tomcat-connectors-1.2.48-src/native 경로로 이동
sh buildconf.sh 실행
./configure --with-apxs=/usr/bin/apxs # 컴파일 진행
make;make install 까지 진행
★ apxs파일이 없다면, httpd-devel패키지를 설치해줍니다.

설치가 완료되면 아파치 모듈경로에 mod_jk.so가 생성됩니다.

chmod 755 /usr/lib64/httpd/modules/mod_jk.so
Please be sure to arrange /etc/httpd/conf/httpd.conf...

본문에선 tomcat connector에서 제공되는 기본 default conf파일을 사용합니다.
tomcat-connectors-1.2.48-src/conf 에 있는 파일을 /etc/httpd/conf로 복제합니다.

 cp -v /opt/tomcat-connectors-1.2.48-src/conf/httpd-jk.conf /etc/httpd/conf.modules.d/  
 [root@6045ffab2521 conf]# cp -v /opt/tomcat-connectors-1.2.48-src/conf/workers.properties /etc/httpd/conf/
'/opt/tomcat-connectors-1.2.48-src/conf/workers.properties' -> '/etc/httpd/conf/workers.properties'
[root@6045ffab2521 conf]# cp -v /opt/tomcat-connectors-1.2.48-src/conf/uriworkermap.properties /etc/httpd/conf/                  
'/opt/tomcat-connectors-1.2.48-src/conf/uriworkermap.properties' -> '/etc/httpd/conf/uriworkermap.properties'
[root@6045ffab2521 conf]# 

[root@6045ffab2521 httpd]# httpd -M| grep jk
jk_module (shared)
#모듈 조회시 확인 가능

기본 제공되는 "workers.properties" 파일을 간단히 살펴보면,
worker에 대한 설정이 되어있습니다.
worker.list=balancer
worker.balancer.type=lb
worker.balancer.balance_workers=node1
worker.node1.reference=worker.template
worker.node1.host=localhost
worker.node1.port=8009
본문에선 서로 다른 버전의 톰캣 3개를 각각의 worker로 지정하여 사용할 예정이므로, worker를 각각 다름이름으로 지정해줍니다.

worker 설정내용
worker.list=tomcat8,tomcat9,tomcat10 ##각 버전이름으로 워커명을 지정합니다.
worker.tomcat9.type=lb
worker.tomcat8.type=lb
worker.tomcat10.type=lb
worker.tomcat9.error_escalation_time=0
worker.tomcat8.error_escalation_time=0
worker.tomcat10.error_escalation_time=0
worker.tomcat9.max_reply_timeouts=10
worker.tomcat8.max_reply_timeouts=10
worker.tomcat10.max_reply_timeouts=10
각 worker별 기본 설정값에 대해서 설정해줍니다.

TOMCAT 8버전에 대한 WORKER 설정
worker.tomcat8.balance_workers=tomcat8node1
worker.tomcat8node1.reference=worker.template
worker.tomcat8node1.host=localhost
worker.tomcat8node1.port=8009
worker.tomcat8node1.activation=A

TOMCAT 9버전에 대한 WORKER 설정
worker.tomcat9.balance_workers=tomcat9node1
worker.tomcat9node1.reference=worker.template
worker.tomcat9node1.host=localhost
worker.tomcat9node1.port=18009
worker.tomcat9node1.activation=A

TOMCAT 10버전에 대한 WORKER 설정
worker.tomcat10.balance_workers=tomcat10node1
worker.tomcat10node1.reference=worker.template
worker.tomcat10node1.host=localhost
worker.tomcat10node1.port=28009
worker.tomcat10node1.activation=A

아파치 virtual host 에 테스트를 진행할 호스트를 지정해줍니다.
<VirtualHost :80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/var/www/html"
ServerName tomcat8.testsvr.kr
ErrorLog "logs/dummy-host.example.com-error_log"
CustomLog "logs/dummy-host.example.com-access_log" common
JkMount /
tomcat8 # "/*" 값으로 모든 파일에 대한 요청은 tomcat에서 처리합니다.

<VirtualHost :80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/var/www/html"
ServerName tomcat9.testsvr.kr
ErrorLog "logs/dummy-host.example.com-error_log"
CustomLog "logs/dummy-host.example.com-access_log" common
JkMount /
tomcat9

<VirtualHost :80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/var/www/html"
ServerName tomcat10.testsvr.kr
ErrorLog "logs/dummy-host.example.com-error_log"
CustomLog "logs/dummy-host.example.com-access_log" common
JkMount /
tomcat10

4.실제 페이지 확인

tomcat 8버전 확인

tomcat 9버전 확인

tomcat 10버전 확인

여기까지해서, 각 tomcat 버전별로 아파치와 연동을 해보았습니다.
다음엔 톰캣 멀티 인스턴스를 구동하여 사용하는걸 해보겠습니다.

profile
그동안 경험 및 공부하면서 얻은 지식을 써놓은 블로그입니다~

0개의 댓글