SW/WEB WAS

[2tier] Apache-Tomcat 연동 _1. mod_jk 방식

yeit 2024. 3. 9. 18:30
728x90

 

INTRO

Apache와 Tomcat을 연동하여 서비스하는 이유

  • Apache는 정적인 콘텐츠를 처리하는데 특화되어 있고, Tomcat은 동적인 콘텐츠(JSP, Servlet 등)를 처리하는데 더 효율적이다. 그러므로 이 둘을 분리함으로써 서비스의 성능을 향상할 수 있다.
  • 서비스의 부하를 분산시켜 안정적인 서비스를 제공할 수 있다.
  • 보안성을 강화할 수 있다.

 


Apache와 Tomcat을 연동하는 방법 3가지

 

1. mod_jk를 사용한 연동 

  • mod_jk를 사용하여 AJP(Apache JServ Protocol) 프로토콜을 통해 Apache와 Tomcat 간의 통신을 설정하는 방법
  • 가장 전통적이고 널리 사용되는 방법 중 하나
  • mod_jk : Apache 웹 서버와 Tomcat 애플리케이션 서버 간의 통신을 위한 모듈

2. mod_proxy를 사용한 연동

  • HTTP 프록시 서버로 설정하고, Apache가 클라이언트로부터 받은 요청을 Tomcat으로 전달하도록 설정하는 방법
  • mod_proxy 모듈은 Apache 웹 서버의 리버스 프록시 기능을 제공
  • mod_jk와 비교해 구성이 간단하고 유연성이 높다.

3. mod_proxy_ajp를 사용한 연동

  • mod_proxy와 mod_jk를 혼합한 것으로, Apache의 리버스 프록시 기능과 AJP 프로토콜을 사용하여 Apache와 Tomcat을 연동하는 방법

 

본 글은 이 세가지 방법 중 1. mod_jk 방식을 다룬다. 

 

 

아파치-톰캣 통신 과정

  1. 사용자가 웹 브라우저를 통해 아파치 웹 서버에 HTTP 요청을 보낸다. (주로 80 포트)
  2. 아파치 웹 서버는 요청이 동적인 콘텐츠인지를 확인한다. 만약 동적 콘텐츠라면 톰캣으로 전달한다.
  3. 동적 콘텐츠 요청인 경우, 아파치 웹 서버는 설정된 AJP 포트(기본적으로 8009 포트)를 통해 해당 요청을 톰캣에게 전달한다.
  4. 톰캣은 요청을 받아 처리한 후, 처리 결과를 아파치 웹 서버로 다시 전송한다.
  5. 아파치 웹 서버는 톰캣으로부터 전달받은 처리 결과를 사용자에게 전송한다.

 

 

Apache, Tomcat 설치 및 연동하기 (mod_jk방식)

1. Apache 설치

# apache 설치
# yum install -y httpd

# 설정파일 및 로그 파일 확인
# cd /etc/httpd
# ll

# 서비스 시작
# systemctl start httpd

 

 웹브라우저에서 공인 IP로 접속이 되는지 확인한다.

 

 

2. Tomcat 설치

# tomcat 설치
# yum install -y tomcat*

# 확인
# cd /usr/share/tomcat
# ll

# 서비스 시작
# systemctl start tomcat
# systemctl enable tomcat

 

웹브라우저에서 공인 IP:8080으로 접속이 되는지 확인한다.

 

 

3. Apache-Tomcat 연동 _mod_jk 방식

3-1. mod_jk설치

mod_jk를 설치하려면 gcc, gcc-c++, httpd-devel 세 가지 패키지가 설치되어 있어야 한다. 시스템에 포함되어 있지 않을 수 있으므로 설치하자.

# 3가지 패키지 모두 설치
# yum install gcc gcc-c++ httpd-devel

 

그다음 Tomcat Connector을 다운로드한다. tomcat-connectors 패키지는 Apache 웹 서버와 Tomcat을 연동하는 데 사용되는 모듈 중 하나인 'mod_jk'를 포함한다.

Apache Tomcat® - Tomcat Connectors (mod_jk) Downloads

 

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

 

해당 링크에서 최신 tar.gz 파일을 다운로드하고, 마우스 우클릭 - 다운로드 링크를 복사한다.

 

 

# Tomcat-connectors 다운로드
# cd /usr/lib
# wget -c <복사한 URL>

# 압축 해제
# tar zxvf tomcat-connector*
# ll

# cd tomcat-connectors-1.2.49-src/
# cd native/

# 컴파일 설치
# ./configure --with-apxs=/usr/bin/apxs
# make
# make install


# 설치 후, /etc/httpd/modules경로에 mod_jk.so파일이 생성되었음을 확인할 수 있다.
# cd /etc/httpd/modules/
# ll | grep mod_jk

 

3-2. Apache 설정_ httpd.conf
Apache의 httpd.conf 파일에서 해당 라인을 추가해 mod_jk를 로드하고,  mod_jk의 작동을 위한 설정을 추가해 준다.
+ jsp, json, xml, do 확장자를 가진 요청은 tomcat으로 전달된다.     

# vi /etc/httpd/conf/httpd.conf
...
# Example:
# LoadModule foo_module modules/mod_foo.so
LoadModule jk_module modules/mod_jk.so 

<VirtualHost *:80>
 ServerName localhost
  JkMount /*.jsp tomcat     
  JkMount /*.json tomcat     
  JkMount /*.xml tomcat     
  JkMount /*.do tomcat 
</VirtualHost>
...

 

3-3.  Apache 설정_ mod_jk.conf

/etc/httpd/conf.modules.d/mod_jk.conf 파일에서 mod_jk 모듈의 설정을 구성한다.

# vi /etc/httpd/conf.modules.d/mod_jk.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>

 

3-4. Apache 설정_ workers.properties 파일 설정
mod_jk가 사용할 worker들의 설정을 담은 workers.properties 파일을 생성하고 설정해 준다.

# vi /etc/httpd/conf/workers.properties
worker.list=tomcat 
worker.tomcat.port=8009 
worker.tomcat.host=localhost 
worker.tomcat.type=ajp13 
worker.tomcat.lbfactor=1

 

3-5. Tomcat 설정_ server.xml
Tomcat의 server.xml 파일을 열어 AJP 커넥터를 추가해 준다.

# vi /usr/share/tomcat/conf/server.xml
...
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
...


3-6. Apache 설정_ httpd.conf

Apache HTTP Server의 문서 루트(DocumentRoot)를 톰캣이 설치된 경로로 수정해 주고, 아래에 Directory 권한을 추가해 준다.

# vi /etc/httpd/conf/httpd.conf
...
DocumentRoot "<톰캣 경로>"

#
# Relax access to content within /var/www.
#
<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

# Further relax access to the default document root:
<Directory "<톰캣 경로">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
...
...
<Directory "<톰캣경로>">     
AllowOverride none     
Require all granted 
</Directory>
...

 

 

4. 서비스 재시작

# systemctl restart httpd
# systemctl restart tomcat

 

http://공인 IP/index.jsp로 접속해서 Tomcat화면이 나오면 성공 !  (8080 포트 없이)

728x90