📚 [Tomcat] Apache + tomcat 연동하기

Category: Tomcat | 📅 July 12, 2021

왜 연동인가?

WAS의 움을 받는 경우, Web 서버 역할인 Apache가 client가 되므로 연동 이라고 쓰는게 맞음

Client -> Apache <-> AJP <-> Tomcat

Call Flow

[APP] -> [Web] ...
[Web] -> [AJP] ...
[AJP] -> [WAS] ...
[AJP] <- [WAS] ...
[Web] <- [AJP] ...
[APP] <- [Web] ...

Proxy로 동작하면? 연계가 맞음.

준비물

  • Apache2
  • tomcat8 이상
  • mod_jk

아파치 설치하기

이 문서에서는 소스를 다운로드 하여 컴파일 하고, make 하는 설치 동작은 제외함.

왜? 구찮음 ㅋㅋㅋㅋㅋ 🤪🤪

그래도 소스 설치가 궁금하신 분들은… 다른 인터넷을 찾아보시라!! 🤪

사실, 컴파일 하기 위한 관련 시스템 패키지 설치가 까다롭고, 패키지로 설치하기위해서는 root 권한인 sudo를 사용해야 하는데 대부분의 대기업(?) 인프라에서 root 권한을 줄리가 없다.

이럴때 패키지를 일일이 설치해야 하는 경우가 있으니, 미리 docker같은 컨테이너로 만들어 두고 docker로 협의 보는 편이 정신 건강에 좋다. (이거 강추 👍👍👍)

👉 여기 참고

mod_jk 설치하기

mod_jk 는 아파치 , 톰캣 연동에서 가장 필요한 설정 파일임.

이 놈으로 설정파일을 이것저것 건드리는게 싫어서 Nginx를 사용하는 경우도 많음. (내 경우임 ㅋ)

$sudo apt install libapache2-mod-jk

# 이 부분은 반드시 확인 한다 
Setting up libapache2-mod-jk (1:1.2.46-1) ...
apache2_invoke: Enable module jk
...

Tomcat 설치하기

👉 여기 참고

workers.properties 파일 생성

이 파일은 jk 연동을 위한 파일이므로 생성하여 등등등~을 기록한다.

  • 생성위치 확인 : cat /etc/apache2/mods-available/httpd-jk.conf | grep workers.properties
$sudo cp /etc/libapache2-mod-jk/workes.properties /etc/libapache2-mod-jk/workes.properties.bak
$sudo vim /etc/libapache2-mod-jk/workes.properties

필요항목

  • workers.tomcat_home
  • workers.java_home
  • workers.list
  • worker.digwas.port
  • worker.digwas.host
  • worker.digwas.type
  • worker.digwas.lbfactor

위의 설정 중 workers_name 인 digwas는 임의의 값으로 여러개의 톰캣이 쓰이는 경우 ,로 구분한다.

ex)

workers.tomcat.home=/usr/share/tomcat9
workers.java_home=$(dirname $(dirname $(readlink -f $(which java))))
workers.list=digwas
worker.digwas.port = 8009
worker.digwas.host = 127.0.0.1
worker.digwas.type = ajp13
worker.digwas.lbfactor = 1 

2번째 줄의 명령어가 동작을 하지 않는 경우, .profile 파일에 위 내용을 명시하여, 표시해도 됨.

WEB 환경 파일 수정

$sudo ln -s /etc/apache2/mods-available/httpd-jk.conf /etc/apache2/mods-enabled/jk.conf
$sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.bak
$sudo vim /etc/apache2/sites-available/000-default.conf
#수정할 부분만 표시함.
DoucumentRoot /usr/share/tomcat9/webapps/ROOT
SetEnvIf Request_URI "/*.html$" no-jk
JKMount /* digwas

테스트하기위해 html파일은 tomcat에서 처리하지 않도록함.

WAS 환경 파일 수정

  • 대상파일 : /usr/share/tomcat9/conf/server.xml

tomcat9를 패키지로 설치했으므로, conf 혹은 webapps 디렉토리가 없다.

따라서, 뒤져서 찾아야 함 -_-;;;

$sudo mkdir -P webapps/ROOT
$sudo mkdir -p logs
$sudo ln -s /etc/tomcat9 /usr/share/tomcat9/conf
<Engine name="Catalina" defaultHost="localhost" jvmRoute="digwas">
#8080은 안쓸꺼라 그냥 주석처리함.
<!--Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /-->

여기서는 SSL 을 사용하지 않고 있으므로, 아래 내용 참고 하여 설정할 것. ( 톰캣 시작 안됨 )

👉 여기참고

서버 재시작

$sudo service apache2 restart
$sudo /usr/share/tomcat9/bin/shutdown.sh
$sudo /usr/share/tomcat9/bin/startup.sh

패키지로 설치하여 root 권한을 이용하였으나, 사용자의 계정을 생성하여 시작해도 무방함.

Test

webapps 디렉토리에 index.html , index.jsp 이렇게 두 개의 테스트용 파일을 만든다. 내용을 구분하기 위해 대충 쓰자.

index.html

apache 

index.jsp

<%-- test.jsp --%>
<%@ page language="java"%>
<%
        int a= 100;
        int b= 200;
%>
<%
        int c= 0;
        c=a+b;
%>

a= <%=a%><br>
b= <%=b%><br>
c= <%=c%>

curl을 이용한 테스트

$curl http://localhost/index.html
$curl http://localhost/index.jsp
💭 Reviews
  • 써놓고 보니 뭔가 장황하다.
  • SSL 과 URL Redirect까지 곁들이면.. 아 놔 -_-;;;;