본문으로 바로가기

Apache/Tomcat 연동 (mode proxy 방식)

category IT/Linux 2021. 11. 30. 15:36
반응형

Intro

오늘은 AWS의 EC2(VM)와 ELB(Loadbalancer)를 사용하여 웹어플리케이션의 가장 기초라고 할 수 있는 웹서버(Apache)와 미들웨어(Tomcat)을 mode proxy 방식으로 연동하는 방법을 알아보도록 하겠습니다.

mode proxy 방식이란?

Apache와 tomcat을 연동하는 방법에는 크게 3가지 옵션이 있습니다. 그 중에 하나가 오늘 사용할 mode_proxy 입니다.

  • mod_jk
  • mode_proxy
  • mode_proxy_ajp

3가지 옵션의 장단점

mod_jk

  • 장점: JkMount 옵션을 사용하여 URL 이나 컨텐츠별로 유연한 설정이 가능(이미지는 웹, 서블릿은 톰캣), apache와 tomcat간의 2진 패킷 전송 크기가 64kb (비교적 성능이 뛰어남)
  • 단점: 별도의 모듈(connector) 설치가 필요하며 tomcat전용임

mode_proxy

  • 장점: 별도의 모듈없이 설정이 간단함. 특정 WAS에 의존적이지 않음
  • 단점: URL 별 유연한 설정이 어려움(ProxyPassMatch를 사용해야함), apache와 tomcat간의 2진 패킷 전송 크기가 8kb (비교적 성능이 떨어짐. 하지만 apache2.4 부터 성능 차이가 크게 없다고함)

mode_proxy_ajp

  • 장점: 별도의 모듈없이 설정이 간단함. 특정 WAS에 의존적이지 않음
  • 단점: HTTP를 사용하는 대신 AJP 프로토콜의 속도 이점과 함께 mod_proxy의 모든 제어 및 (상대적으로) 구성 용이성과 함께 제공 됨. 그러나 mod_jk만큼 설정이 유연하지 않음.

구현 아키텍처

구현 순서

AWS EC2 Instance 및 ELB구축은 생략하였으며, OS는 Amazonlinux1 기준 입니다.

  1. Apache 설치 (httpd-.2.4.x)
  2. tomcat 설치 (tomcat.8.5.x)
  3. Jdk 설치 (jdk-12.0.x)
    • path 설정
    • tomcat 서비스 등록
    • tomcat 부팅 시 시작 설정
  4. Apache 설정
    • httpd.conf 설정

Apache 설치 (httpd-.2.4.x) on apache EC2

yum install –y httpd
service httpd start
netstat -nap | grep httpd

Apache 부팅 시 자동시작 설정 on apache EC2

#RHEL7 에서는 systemctl enable httpd 로 쉽게 설정 가능
cd /etc/init.d
chkconfig --level 2345 httpd on
Chkconfig –list httpd 

#EC2 재시작 후 자동 시작 확인
netstat –nap | grep httpd

tomcat 설치 (tomcat.8.5.x) on tomcat EC2

  1. http://tomcat.apache.org
  2. 톰캣 링크 복사 (아래와 같이 wget으로 해당 링크 다운로드)
    yum install –y wget
    cd /usr/local/src
    wget http://apache.tt.co.kr/tomcat/tomcat-7/v7.0.94/bin/apache-tomcat-7.0.94.tar.gz
    tar xvzf apache-tomcat-7.0.94.tar.gz
    ln ]-s apache-tomcat-7.0.94 tomcat

apache version 변경으로 URL변경 될 수 있으므로 공식홈페이지에서 경로 확인 필요

Jdk 설치 (jdk-12.0.x) on tomcat EC2

  1. http://www.oracle.com
  2. JDK 다운로드 주소복사 ( tar.gz )
    cd /usr/local/src
    wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/12+33/312335d836a34c7c8bba9d963e26dc23/jdk-12_linux-x64_bin.tar.gz
    tar –xvzf jdk jdk-12_linux-x64_bin.tar.gz

jdk version 변경으로 URL변경 될 수 있으므로 공식홈페이지에서 경로 확인 필요

JDK및 tomcat path 설정 on tomcat EC2

vim /etc/profile

# 아래 내용 추가
export JAVA_HOME = /usr/local/src/jdk-12
export CATALINA_HOME = /usr/local/src/tomcat
source /etc/profile
echo $JAVA_HOME
echo $CATALINA_HOME

tomcat 서비스 등록 on tomcat EC2

cd /etc/init.d
vi tomcat

## 아래 스크립트 추가

#!/bin/bash
export JAVA_HOME=/usr/local/src/jdk-12
export CATALINA_HOME=/usr/local/src/tomcat
case "$1" in
    start)
        echo "Starting tomcat: "
        $CATALINA_HOME/bin/startup.sh
        ;;
    stop)
        echo "Shutting down tomcat: "
        $CATALINA_HOME/bin/shutdown.sh
        ;;
    restart)
        echo "Restarting tomcat: "
        $CATALINA_HOME/bin/shutdown.sh;
        $CATALINA_HOME/bin/startup.sh
        ;;
    *)
        echo "Usage: service tomcat {start|stop|restart}"
        exit 1
esac
exit 0
chmod 755 tomcat
service tomcat start

tomcat 부팅 시 자동 시작 설정 on tomcat EC2

# RHEL7 에서는 systemctl enable tomcat.service 로 쉽게 설정 가능
cd /etc/init.d
chkconfig –-add tomcat
chkconfig –-list tomcat

### EC2 재시작 후 자동 시작 확인
netstat –nap | grep tomcat

aphache httpd.conf 설정 on apache EC2

vi /etc/httpd/httpd.conf

### 맨 아랫줄에 추가
<VirtualHost *:80>
        ServerName aaa.test.com
        ProxyRequests Off
        ProxyPreserveHost On
        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>
        ProxyPass / http://internal-dev-int-clb-123456789.ap-northeast-2.elb.amazonaws.com:8080/ disablereuse=on
        ProxyPassReverse / http://internal-dev-int-clb-123456789.ap-northeast-2.elb.amazonaws.com:8080/
</VirtualHost>

<VirtualHost *:80>
        ServerName bbb.test.com
        ProxyRequests Off
        ProxyPreserveHost On
        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>
        ProxyPass / http://internal-dev-int-clb-123456789.ap-northeast-2.elb.amazonaws.com:8080/ disablereuse=on
        ProxyPassReverse / http://internal-dev-int-clb-123456789.ap-northeast-2.elb.amazonaws.com:8080/
</VirtualHost>

참고

반응형