본문 바로가기
WEB&WAS/Apache

WEB) Apache와 Tomcat 연동하기 (AJP,mod_jk)

by LILO 2022. 1. 3.
반응형

INTRO

Apache에서 접속하면 Tomcat의 APP이 바로 보일 수 있게 연동을 해주는 작업이 필요합니다.

연동을 하는 이유는 이전의 글을 참고하기 바랍니다.

 

WAS) WAS에 대한 이야기 (5) - WAS와 Web Server를 분리하는 이유

WAS와 Web Server를 분리하는 이유 (Web WAS 연동 이유) 구글에 검색을 해보면 아래와 같은 이유로 많이 나올 것입니다. 1) 정적과 동적 처리를 나누기 위해서 2) WAS의 Web Server 역할은 성능상 좋지 않기

lilo.tistory.com

연동하는 방법은 크게 3가지로 나뉩니다.

- Tomcat Connector를 이용한 mod_jk 연동 (AJP)
- mod_proxy를 이용한 reverse proxy 기능으로 연동 (Proxy 개념 필요)
- mod_proxy_ajp를 이용한 AJP를 reverse proxy로 사용해서 연동 (기존의 2가지 방법 모두 개념이 필요함)

 

 

Apache와 Tomcat mod_jk 연동하기

 

 Tomcat Connector 다운로드 (WEB)

 

Apache와 Tomcat을 연동해줄 Connector를 다운로드합니다.

※ 둘 사이의 통신 프로토콜은 AJP입니다. 

 

Apache Tomcat® - Tomcat Connectors (mod_jk) Downloads

You must verify the integrity of the downloaded files. We provide OpenPGP signatures for every release file. This signature should be matched against the KEYS file which contains the OpenPGP keys of Tomcat's Release Managers. We also provide SHA512 checksu

tomcat.apache.org

 

 

 Tomcat Connector 압축 해제 (WEB)

[root@LILO-WEB ~]# tar xvzf tomcat-connectors-1.2.48-src.tar.gz

소스 설치시 아래와 같은 에러가 나올 수 있으니 미리 설치하고 넘어가겠습니다.

- 에러: gcc: error: /usr/lib/rpm/redhat/redhat-hardened-cc1: No such file or directory
- 해결: # yum install  redhat-rpm-config

 

 

 Tomcat Connector 소스 트리 구성 및 소스 설치 (WEB)

 

apxs는 Apache의 확장 모듈을 등록할 때 사용하는 툴으로 설치된 Apache 엔진의 bin 디렉토리에 위치되어 있습니다.

[root@LILO-WEB ~]# cd /root/tomcat-connectors-1.2.48-src/native
[root@LILO-WEB native]# ./configure --with-apxs=/app/apache2/bin/apxs
[root@LILO-WEB native]# make && make install

 

 

mod_jk 모듈 권한 변경 (WEB)

 

설치 후에 로그로 mod_jk 모듈에 대한 권한 변경에 대한 내용이 나옵니다. 화면대로 진행합니다.

[root@LILO-WEB native]# chmod 755 /app/apache2/modules/mod_jk.so
[root@LILO-WEB native]# ll /app/apache2/modules/mod_jk.so
-rwxr-xr-x 1 root root 1418608 Jan  2 10:16 /app/apache2/modules/mod_jk.so

 

 

mod_jk 모듈 로딩 (WEB)

 

모듈 설치가 완료되었으니 Apache 설정 파일에서 해당 모듈을 사용하겠다는 구문을 작성합니다. 

되도록이면 관리 포인트를 위해 Module 등록 라인에 맞춰서 작성하는 것이 좋습니다.

[root@LILO-WEB apache2]# vim /app/apache2/conf/httpd.conf
LoadModule jk_module modules/mod_jk.so

httpd.conf 설정 파일 내용

 

 

mod_jk conf Include(WEB)

 

mod_jk도 로그, shm 파일 경로 설정, Worker 설정 파일 경로 설정이 필요하기 때문에 별도의 구문을 추가해야됩니다.

httpd.conf에 추가해줘도 되지만 관리 포인트를 위해 별도의 설정 파일을 생성하는 것이 좋습니다.

이 부분 역시 Include 라인이 모여있는 곳에 작성하는 것이 좋습니다.

[root@LILO-WEB apache2]# vim /app/apache2/conf/httpd.conf
# mod_jk Connector
Include conf/extra/httpd-modjk.conf

httpd.conf 설정 파일 내용

 

 

 mod_jk conf 파일 작성 (WEB)

 

mod_jk 설정파일의 내용을 작성합니다.

[root@LILO-WEB apache2]# vim /app/apache2/conf/extra/httpd-modjk.conf
<IfModule jk_module>
    JkWorkersFile conf/extra/workers.properties
    JkShmFile logs/mod_jk.shm
    JkLogFile logs/mod_jk.log
    JkLogLevel info
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
</IfModule>

 

 

workers.properties 파일 작성 (WEB)

 

Tomcat과의 연동의 핵심인 Worker 설정 파일을 작성합니다.(workers.properties)

추후 WAS 증설을 대비해 그룹으로 생성해서 구성원만 추가하면 바로 연동할 수 있는 방식으로 설정하였습니다.

 

load_balancer라는 그룹의 worker1이라는 구성원이 연동될 WAS이라는 설정입니다.

※ port: AJP 포트, host: WAS 주소, type: ajp13(Tomcat 설정 파일 참고) 

worker.list=lilo_lb

worker.lilo_lb.type=lb
worker.lilo_lb.balance_workers=worker1

worker.worker1.port=8009
worker.worker1.host=192.168.56.100
worker.wokrer1.type=ajp13

 

 

 Tomcat AJP Port, Secret Key 비활성화, Redirect Port 설정 (WAS)

 

다음은 WAS 서버에서 AJP 포트를 설정하는 작업입니다.

<!--과 -->를 제거하면 주석이 제거됩니다. 만약 다른 포트를 사용할 경우 변경하면 됩니다.

xml 파일의 문법이나 주석 추가 및 제거와 같은 간단한 작업은 숙지하고 있으면 WAS 작업에 많이 도움이 될 것입니다.

 

만약 secretRequired="false"를 제외하고 실행하게 된다면 Secret Key가 없기 때문에 AJP 연동시 정상 작동이 되지 않습니다.

AJP 프로토콜 설정 구문에 secretRequired="false"를 입력합니다.

[root@LILO-WAS bin]# vim ../conf/server.xml
<Connector protocol="AJP/1.3" address="0.0.0.0" secretRequired="false" port="8009" redirectPort="8443" />

tomcat의 server.xml 설정 파일 내용

 

Secret Key가 없을 경우는 false를 설정해야 되는데 당연히 보안적으로 좋지 않습니다.

본문에서는 secretRequired 옵션을 false로 사용하지만 Tomcat 문서에서는 신뢰할 수 있는 네트워크에서만 사용해야 된다고 언급이 되고 있습니다.

보안 취약 부분일 수도 있기 때문에 운영 서버에는 필수로 Secret key를 생성하고  secretRequired 옵션을 true로 사용하기 바랍니다. 

 

Apache Tomcat 9 Configuration Reference (9.0.56) - The AJP Connector

The proxyName and proxyPort attributes can be used when Tomcat is run behind a proxy server. These attributes modify the values returned to web applications that call the request.getServerName() and request.getServerPort() methods, which are often used to

tomcat.apache.org

 

 

AJP Port 설정 적용을 위한 Tomcat 재기동 (WAS)

[root@LILO-WAS ~]# /app/tomcat9/bin/shutdown.sh
[root@LILO-WAS ~]# /app/tomcat9/bin/startup.sh

 

 

AJP Port 및 Container Port 오픈 확인 (WAS)

[root@LILO-WAS bin]# ss -atnlp

8009 오픈 확인

 

 

JkMount 설정 (WEB)

 

Apache 서버에서 httpd.conf에 아래의 문구를 추가합니다.

JKMount 옵션을 이용해 AJP 프로토콜을 통해 해당 확장자는 WAS에서 처리할 수 있게하는 설정입니다.

/*은 모든 파일을 WAS에서 처리한다는 의미를 가집니다.

[root@LILO-WEB apache2]# vim /app/apache2/conf/httpd.conf
# 220103 add JkMount Options by LILO
JkMount /* lilo_lb

httpd.conf 설정 파일 내용

 

graceful을 이용하면 무중단으로 설정을 완료할 수 있습니다.

[root@LILO-WEB apache2]# /app/apache2/bin/apachectl graceful

 

 

연동 최종 테스트 (브라우저)

 

최종으로 브라우저에서 연동을 확인합니다.

http://<Web Server 주소>를 입력하면 WAS에 배포된 APP이 보여야됩니다.

연동 확인 장면

 

반응형