목차

Apache와 Tomcat을 연동하면 정적 요청은 웹 서버(Apache)가, 동적 요청은 WAS(Tomcat)가 처리하는 WEB-WAS 구조를 만들 수 있다. 이 글은 RHEL 8 환경에서 mod_jk 커넥터를 직접 컴파일해 아파치 2.4와 톰캣 10.1을 연동하는 과정을 설치부터 가동 확인까지 단계별로 정리한다. 소스 설치 환경에서 흔히 막히는 apxs 경로 문제와 AJP 커넥터 설정까지 함께 다룬다.

실행 환경

  • OS : RHEL 8
  • Apache 2.4.58
  • Tomcat 10.1.16
  • JAVA : openjdk version “11.0.19” 2023-04-18 LTS

먼저 아파치(2.4 버전)와 톰캣은 미리 설치되어 있어야 한다. 아래 과정은 두 미들웨어가 설치된 상태를 전제로 한다.

1. Tomcat 다운로드 및 인스턴스 준비

Tomcat 홈페이지에서 다운로드 링크를 복사해 원하는 위치에 받는다. 압축을 푼 뒤 필요한 수량만큼 인스턴스를 압축 해제한다.

https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.16/src/apache-tomcat-10.1.16-src.tar.gz

2. 필요한 패키지 설치

톰캣 연동에 필요한 패키지는 Java 11, autoconf, libtool, httpd-devel이다. 단, httpd-devel은 아파치를 yum으로 설치했을 때만 설치한다. 필자는 아파치를 소스 설치했으므로 Java 11과 autoconf, libtool만 설치했다.

yum install java-11-openjdk.x86_64 autoconf libtool

autoconf, libtool 설치를 빼먹어서 오류 찾느라 몇 시간을 고생했다. 급하게 마음먹지 말고 차근차근, 꼼꼼하게 필요한 절차를 진행하자. 이 도구들은 소스 코드를 빌드하고 설치하는 데 사용되는 빌드 유틸리티다.

3. 톰캣 커넥터 다운로드 및 mod_jk 컴파일 설치

여기서부터가 조금 난해하지만, 차근차근 따라가면 된다. 먼저 톰캣을 설치할 tomcat1, tomcat2 폴더를 생성한다.

sudo mkdir tomcat1 tomcat2

#일단 tomcat1로 이동하자
cd tomcat1

이어서 톰캣 커넥터(tomcat-connectors)를 다운로드한다.

https://dlcdn.apache.org/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.49-src.tar.gz

다운로드한 커넥터의 native 디렉터리에서 mod_jk를 컴파일한다. 소스 설치 환경에서는 apxs 경로 문제가 자주 발생하므로 아래 주석을 꼼꼼히 따라가자.

# tomcat connector 디렉터리로 이동
cd apache-tomcat-10.1.16
# native 디렉토리로 이동
cd native

# 이 과정을 해주지 않으면 후에 나올 ./configure로 컴파일을 생성할 때 경로를 못 찾는 오류가 생긴다. 반드시 할 것
# error: You must specify a valid --with-apxs path  → 에러 발생 (RHEL 8 에서 발생)
vi /usr/local/src/httpd-2.4.58/bin/apxs

# apxs 파일의 1번 줄의 기존 내용은 이럴 것이다. 참고로 apxs는 Apache의 확장 모듈을 등록할 때 사용하는 툴이다.
#!/replace/with/path/to/perl/interpreter -w

# apxs 파일의 1번줄 내용을 아래와 같이 바꿔준다.
#!/usr/bin/perl


# 컴파일 설치 진행
# apxs 경로를 알 수 없다고 나올 경우, whereis apxs 로 확인 필요
# 아파치를 소스설치 한 경우, apxs 경로를 반드시 확인해야 한다!!!
# 필자의 경우 apxs 경로는 /usr/local/src/httpd-2.4.58/bin/apxs <- 여기였다
./configure --with-apxs=/usr/local/src/httpd-2.4.58/bin/apxs        # apxs 경로로 컴파일 설치
make && make install      # make 파일 및 mod_jk.so 파일 생성

# mod_jk.so 파일이 정상적으로 설치 된 것인지 확인한다.
# find 명령어로 검색되지 않으면 제대로 설치 되지 않은 것을 의미하니, 다시 꼼꼼히 체크하도록 해야 한다.
find / -name "mod_jk.so"         # find / -name 하면 / 밑의 모든 디렉터리에서 해당 이름을 가진 파일을 찾는다.

#make install 진행 후, /usr/lib64/httpd/modules 경로에 mod_jk.so가 있어야 된다.
cd /usr/local/src/httpd-2.4.58/modules
cp -arp mod_jk.so /usr/lib64/httpd/modules

4. Apache – Tomcat 연동 설정

1) httpd 설정 파일에 mod_jk 정의 추가

httpd-2.4.58.conf 파일에 mod_jk 모듈과 워커 매핑 설정을 추가한다.

LoadModule jk_module modules/mod_jk.so       #mod_jk.so 파일 정의

<VirtualHost *:80>
	JkMount /* balancer
</VirtualHost>

<ifModule jk_module>
        JkWorkersFile conf/workers.properties     #workers.properties 파일을 매핑하여 톰캣과의 연결을 정의

        JkShmFile logs/mod_jk.shm
        JkLogFile logs/mod_jk.log

        JkLogLevel error         #로그 레벨 지정

        JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
</ifModule>

2) workers.properties 작성

httpd-2.4.58.conf가 있는 같은 디렉터리에 workers.properties 파일을 생성하고 다음과 같이 작성한다.

vi workers.properties

# worker list
worker.list=balancer

# balancer
worker.balancer.type=lb
worker.balancer.balance_workers=tomcat1

# tomcat1
worker.tomcat1.port=8009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13

3) 톰캣 server.xml의 AJP 커넥터 활성화

톰캣 server.xml 파일에서 AJP 포트를 활성화한다.

(중략)
    <Connector protocol="AJP/1.3"
               address="0.0.0.0"
               secretRequired="false"
               port="8009"
               redirectPort="8443"
               maxParameterCount="1000"
               />
(중략)

※ address=”0.0.0.0″, secretRequired=”false”를 수정/추가해 주지 않으면 정상 작동하지 않는다. 필자의 경우 secretRequired=”false”를 추가하지 않았다가 고생을 꽤나 했다.

5. 톰캣과 아파치 가동

설정이 끝났으면 톰캣을 먼저 기동한다.

/home/tomcat1/apache-tomcat-10.1.16/bin/startup.sh

톰캣 중지는 bin/shutdown.sh이며, startup.sh와 같은 디렉터리에 위치한다. 이어서 아파치도 가동한다.

/path/of/apache/bin/apachectl start
#필자의 경우
/usr/local/src/httpd-2.4.58/bin/apachectl start

로컬 브라우저에 자신의 IP를 입력해(80 포트 접속) 아래와 같은 화면이 나오면 연동 성공이다.

Apache Tomcat 연동 완료 화면

정리

Apache와 Tomcat 연동의 핵심은 mod_jk 커넥터를 컴파일해 AJP 프로토콜로 두 미들웨어를 연결하는 것이다. 소스 설치 환경에서는 apxs 경로 지정과 autoconf/libtool 설치, server.xml의 AJP 커넥터 옵션(address, secretRequired)을 빠뜨리지 않는 것이 관건이다. 이렇게 단일 톰캣 연동을 완료했다면, 다음 단계로 톰캣 인스턴스를 둘로 늘려 부하를 분산하는 아파치-톰캣 멀티 인스턴스 로드밸런싱과, 연동된 톰캣에 DB를 붙이는 Tomcat-MariaDB 연동으로 이어가 볼 수 있다.

💬 댓글 0

💬 댓글을 남기려면?
첫 댓글을 남겨보세요 ✨

이 콘텐츠가 도움이 됐나요?

누스쿨 커뮤니티에서 더 많은 커리어 전략을 나눠요