[CentOS] apache-tomcat 연동하기


Development note/Linux  2019. 5. 13. 23:47

안녕하세요. 명월입니다.

 

이번 포스팅에서는 웹서버 apache와 어플리케이션 서버 tomcat을 연동하겠습니다.

먼저 apache와 tomcat을 연동하는 이유에 대해서는 tomcat은 정확히 말하면 웹서버가 아닌 어플리케이션 서버로써 웹서버의 역할은 상당히 떨어집니다. 최근에는 9.x버전까지 올라가면서 웹서버 만큼의 성능을 발휘해서 그닥 apache와 tomcat을 연동할 필요성을 못 느낍니다.

그러나 저는 서버 안에 jankins와 웹서버를 불리하고 jsp와 php를 혼재해서 프로그래밍을 하는 스타일이기 때문에 apache의 virtual host 기능이 필요하므로 tomcat 한개 서버를 돌리기 보다는 여러개의 tomcat을 하나의 apache로 묶어서 호스트 이름별로 분산하는 기능으로 많이 사용합니다.

그래서 오늘은 apache와 tomcat을 연동해보겠습니다.

먼저 tomcat에는 http포트로 브라우져와 http통신하는 영역도 있지만 ajp 프로토콜이라고 apache와 통신하는 포트가 있습니다. apache와 tomcat을 연동하기 위해서는 ajp 프로토콜을 이용하겠습니다.
먼저 연동하기 위해서는 mod_jk 설치되어 있어야 합니다.

 

source version - https://tomcat.apache.org/download-connectors.cgi

wget http://ftp.tsukuba.wide.ad.jp/software/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.46-src.tar.gz
yum install gcc gcc-c++ httpd-devel #의존성 라이브러리
tar zxvf tomcat-connectors-1.2.46-src.tar.gz

압축을 풀었으면 이제 컴파일을 해야 합니다. 먼저 native 폴더로 갑니다.

cd tomcat-connectors-1.2.46-src
cd native/
./configure --with-apxs=/usr/bin/apxs

make
make install

「/etc/httpd/modules」폴더에서 mod_jk.so 파일을 보면 컴파일이 잘 되었다는 걸 확인할 수 있습니다.

그리고 httpd.conf에 가서 다음과 같이 설정합니다.

<IfModule mod_jk.c>
     JkWorkersFile conf/workers.properties
     JkShmFile run/mod_jk.shm
     JkLogFile logs/mod_jk.log
     JkLogLevel info
     JkLogStampFormat "[%y %m %d %H:%M:%S] "
 </IfModule>

그리고 나서 workers.properties를 만듭니다. 저의 경우에는 jankins와 웹 서버가 두 개가 있기 때문에 두 개를 설정했습니다.

worker.list=devhousehold,devtistoryblog,jenkins

worker.devhousehold.port=18010
worker.devhousehold.host=dev.household.nowonbun.com
worker.devhousehold.type=ajp13
worker.devhousehold.lbfactor=1

worker.devtistoryblog.port=18010
worker.devtistoryblog.host=dev.tistoryblog.nowonbun.com
worker.devtistoryblog.type=ajp13
worker.devtistoryblog.lbfactor=1

worker.jenkins.port=18009
worker.jenkins.host=jenkins.nowonbun.com
worker.jenkins.type=ajp13
worker.jenkins.lbfactor=1

다시 httpd.conf으로 돌아와서 가장 하단에 다음을 추가했습니다.

<VirtualHost *:80>
  DocumentRoot "/var/www/html"
</VirtualHost>
<VirtualHost *:80>
  DocumentRoot "/home/program/httpd"
  ServerName dev.nowonbun.com
  <Directory "/home/program/httpd">
    AllowOverride none
    Require all granted
  </Directory>
</VirtualHost>
<VirtualHost *:80>
  JkMount /* jenkins
  ServerName jenkins.nowonbun.com
</VirtualHost>
<VirtualHost *:80>
  JkMount /* devhousehold
  ServerName dev.household.nowonbun.com
</VirtualHost>
<VirtualHost *:80>
  JkMount /* devtistoryblog
  ServerName dev.tistoryblog.nowonbun.com
</VirtualHost>

그리고 두번째의 /home/program/httpd의 경우에는 apache 권한도 부여합니다.

chown -R apache:apache /home/program/httpd

※참고 - https://suwoni-codelab.com/linux/2017/05/29/Linux-CentOS-Apache-Tomcat/

※참조 - https://joont.tistory.com/46

※참조 - https://sybd.tistory.com/50