아파치와 톰캣 연동 하는 방법에 대해 작성하였습니다.
구성정보
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
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
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
tomcat 8버전 확인
tomcat 9버전 확인
tomcat 10버전 확인
여기까지해서, 각 tomcat 버전별로 아파치와 연동을 해보았습니다.
다음엔 톰캣 멀티 인스턴스를 구동하여 사용하는걸 해보겠습니다.