본문 바로가기
프로그래밍/운영체제, 서버

CentOS 7에서 mod_jk사용하여 Apache 2.4 와 Tomcat 연동하기

by pentode 2018. 8. 23.

CentOS 7에서 mod_jk 모듈을 이용하여 Apache 2.4와 Tomcat을 연동해 봅니다. Apache 웹서버와 Tomcat은 미리 설치되어 있다고 가정합니다. 참고로 Apache와 Tomcat을 연동하는 방법으로는 mod_proxy_ajp 를 사용하는 방법도 있습니다.



1. 시스템 확인

Apache 버전에 맞는 Tomcat Connector(mod_jk)의 소스 또는 바이너리를 구할때 필요한 정보들 입니다.


- Linux 커널 버전확인

# uname --all

Linux localhost.localdomain 3.10.0.862.11.6.el7.x86_64


- 배포판 확인

# cat /etc/*-release

CentOS Linux release 7.5.1804 (Core)


- rpm으로 설치한 htttpd 확인


# rpm -qa | grep httpd

httpd-2.4.6-80.el7.centos.1.x86_64


2. mod_jk 모듈 만들기

Linux용 Tomcat Connector인 mod_jk.so 파일을 얻기 위해서는 소스를 직접 컴파일 하거나 시스템 환경에 맞는 바이너리 파일을 다운로드 받으면 됩니다.


- Apache 2.4 용 바이너리를 구하지 못해서 소스로 설치합니다.


- 소스를 다운로드 합니다.

# wget -c http://mirror.navercorp.com/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.43-src.tar.gz



- 압축을 풉니다.

# tar -xvzf tomcat-connectors-1.2.43-src.tar.gz


- 디렉토리 이동

# cd tomcat-connectors-1.2.43-src/native


- apxs(APache eXtenSion)는 httpd-devel 이 필요합니다. 없으면 설치합니다.

# yum install httpd-devel


- gcc가 필요합니다. 없으면 설치합니다.

# yum install gcc


- 컴파일을 위한 설정을 합니다.(CentOS 6.5에서는 /usr/sbin/apxs 일 수 있습니다.)

# ./configure --with-apxs=/usr/bin/apxs


- 컴파일 합니다.

# make


- 파일을 확인합니다.

# file apache-2.0/mod_jk.so

apache-2.0/mod_jk.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked ...


- Apache 모듈 디렉토리로 복사합니다.

# cp apache-2.0/mod_jk.so /usr/lib64/httpd/modules/



3. Apache 설정하기


- /etc/httpd/conf.d/httpd-jk.conf 파일을 만듭니다.

LoadModule jk_module modules/mod_jk.so


<IfModule jk_module>

  JkWorkersFile conf.d/workers.properties

  JkLogFile logs/mod_jk.log

  JkLogLevel info

  JkShmFile run/mod_jk.shm

  JkMountFile conf.d/uriworkermap.properties

</IfModule>


- /etc/httpd/conf.d/workers.properties 파일을 만듭니다.

worker.list=worker1

worker.worker1.type=ajp13

worker.worker1.host=192.168.0.2

worker.worker1.port=8009


- /etc/httpd/conf.d/uriworkermap.properties 파일을 만듭니다.

/*.do=worker1

/*.jsp=worker1

- 설정 테스트 및 시작하기

- Apache 설정 파일을 테스트 해봅니다.

# apachectl configtest

Syntax OK


- Apache 웹서버를 시작하고 연동을 테스트 합니다.

# apachectl start


- 실행 결과



연동이 완료 되었습니다.



※ 참고


1. 80 port 열기


- CentOS 7

# firewall-cmd --permanent --zone=public --add-port=80/tcp

# firewall-cmd --reload


- CentOS 6.5

# iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

# /etc/init.d/iptables save

# service iptables restart

# iptables -nL


등록 했는데도 열리지 않을경우 룰의 순서를 확인해보세요. REJECT가 맨 나중에 나와야 합니다. 순서가 다르다면 iptables 명령으로 REJECT삭제 하고 다시 추가하면 끝으로 이동합니다. 다른 방법은 /etc/sysconfig/iptables 파일의 내용에서 순서를 수정하고 iptables 서비스를 재시작하면 됩니다.



2. Apache 2.2.x 용 바이너리 받아 설치하기

- Apach3 2.2.x 용 바이너리는 받을 수가 있습니다. 만약 Apache 2.2.x 대 버전을 사용중이라면 아래의 방법으로  바이너리를 다운받아 사용해도 됩니다.

- 이 바이너리는 RHEL-5 x86_64에서 빌드되었고, gcc 4.1.2 가 사용된 Apache 2.2.x용 바이너리 입니다.


-  바이너리를 다운 받습니다.

# wget -c https://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.31/x86_64/mod_jk-1.2.31-httpd-2.2.x.so


- Apche 모듈 디렉토리에 복사합니다. 파일명은 mod_jk.so 로 바꿉니다.

# cp ./mod_jk-1.2.31-htttpd-2.2.x.so /usr/lib64/httpd/modules/mod_jk.so


- 실행권한을 줍니다.

# chmod 775 /usr/lib64/httpd/modules/mod_jk.so


3. 설치와 설정 파일 모두 이상이 없는데 안되는 경우

- 소스 컴파일시 포함되어 있는 http-jk.conf 파일에는 JkShmFile logs/mod_jk.shm 로 설정되어 있는데, 그대로 사용했을 경우 logs 폴더에 쓸 권한이 없어서 Apache 서버가 시작이 안되는 경우가 있습니다. JkShmFile run/mod_jk.shm 으로 하면 실행이 됩니다.


반응형