Java&Web

[Apache] Apache와 Tomcat 연동하기

프로그래민 2020. 12. 17. 17:06
반응형

[Network] Web Server와 WAS

 

[Network] Web Server와 WAS

Web Server란? 개념 하드웨어적 의미로는 Web Server가 설치되어 있는 컴퓨터 소프트웨어적 의미로는 클라이언트의 요청을 받아 정적 컨텐츠(image, html, css, javascript 등)를 제공하는 서버 기능 HTTP 프로

minkwon4.tistory.com

 

Apache와 Tomcat의 연동

Web Server인 Apache와 WAS인 Tomcat의 연동에는 다음과 같은 3가지 방식이 있다.

연결 방식 장점 단점
mod_jk - Tomcat Connector를 사용하는 방식
- 가장 많이 사용해온 방식
- mod_jk 관련 자료가 많음
- JKMount 옵션을 이용하면 URL이나 컨텐츠 별로 유연한 설정 가능
- 별도의 모듈 설치 필요
- 설정이 어려움
- Tomcat 전용
mod_proxy - Reverse Proxy 기능을 사용하는 방식
- 별도 모듈 설치를 필요로 하지 않음
- 특정 WAS에 의존적이지 않음
- URL에 따른 유연한 설정이 어려움
mod_proxy_ajp - AJP Protocol을 Reverse Proxy로 사용하는 방식
- 별도 모듈 설치를 필요로 하지 않음
- 특정 WAS에 의존적이지 않음
- URL에 따른 유연한 설정이 어려움

연동원리

Apache와 Tomcat이 연동하기 위해선 Apache가 외부서비스(WAS, Tomcat 등)와 연동하기 위해 정한 프로토콜인 AJP를 통해 서로 통신해야 한다. Apache는 AJP를 이용하여 80포트(예시)로 들어오는 요청은 자신이 받고, 동적 컨텐츠를 필요로 하는 요청은 Tomcat에 접속하여 처리한다.

  1. Apache의 httpd.conf에 Tomcat 연동을 위한 설정을 추가 및 Tomcat에서 처리할 요청 지정
  2. 클라이언트는 Apache에 접속(80포트)
  3. 만일 클라이언트의 요청이 Tomcat에서 처리하도록 지정된 요청이라면 Apache는 Tomcat의 AJP포트(8090포트, 예시)에 접속하여 요청을 전달
  4. Tomcat은 Apache로 부터 받은 요청을 처리하고 Apache에게 응답
  5. Apache는 Tomcat에게 받은 응답을 클라이언트에 전달

 

mod_jk 연동법

mod_jk 설치

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
wget http://mirror.apache-kr.org/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.42-src.tar.gz
 
tar xvfz tomcat-connectors-1.2.42-src.tar.gz
 
mv tomcat-connectors-1.2.42-src/ /usr/local/src
yum -y install autoconf libtool
 
cd /usr/local/src/ tomcat-connectors-1.2.42-src/native/
./buildconf.sh
./configure --with-apxs=/usr/local/apache2/bin/apxs
 
make && make install
find / -name "mod_jk.so"
 
 # 이때 파일이 검색 되면 제대로 설치된 것임.
 # /etc/httpd/modules/ 경로의 파일안에 추가 되어있을 것임.
 
cd /usr/local/src/tomcat-connectors-1.2.42-src/native/apache-2.0/
cp mod_jk.so /usr/local/apache2/modules/
                        

 

설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
vi /etc/httpd/conf/httpd.conf
 
 
LoadModule jk_module modules/mod_jk.so
 
 
<VirtualHost *:80>
    ServerName localhost
    # 확장자 jsp, json, xml, do를 가진 경로는 woker tomcat으로 연결하는 구문.
    JkMount /*.jsp tomcat
    JkMount /*.json tomcat
    JkMount /*.xml tomcat
    JkMount /*.do tomcat
</VirtualHost>
 
<ifModule jk_module>
    # 워커 설정파일 위치
    JkWorkersFile conf/workers.properties
 
    # 로그 위치
    JkLogFile logs/mod_jk.log
 
    # 로그레벨 설정
    JkLogLevel info
 
    # 로그 포맷에 사용할 시간 형식을 지정한다.
    JkLogStampFormat "[%y %m %d %H:%M:%S] "
 
    # Our JK shared memory file
    JkShmFile logs/mod_jk.shm
    JkMountFile conf/uriworkermap.properties
</ifModule>
                                                   

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vi /usr/local/apache2/conf/workers.properties
 
#다음 내용을 추가
worker.list=instance1,instance2
 
worker.instance1.port=8009
worker.instance1.host=localhost
worker.instance1.type=ajp13
worker.instance1.lbfactor=1
 
worker.instance2.port=8109
worker.instance2.host=localhost
worker.instance2.type=ajp13
worker.instance2.lbfactor=1
                                                                                            

worker port : 이 port는 Tomcat의 AJP포트를 의미
worker lbfactor : 부하 분산을 위한 설정으로 Tomcat 서버들의 연결 무게를 설정

 

로드 밸런스 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
vim /usr/local/apache2/conf/uriworkermap.properties
 
#다음 내용을 추가
/*=balancer
 
 
vi /usr/local/apache2/conf/workers.properties
 
#다음 내용을 추가
worker.list=balancer
 
worker.instance1.port=8009
worker.instance1.host=localhost
worker.instance1.type=ajp13
worker.instance1.lbfactor=1
 
worker.instance2.port=8109
worker.instance2.host=localhost
worker.instance2.type=ajp13
worker.instance2.lbfactor=1
 
worker.balancer.type=lb
worker.balancer.balance_workers=instance1,instance2
worker.balancer.sticky_session=TRUE
                                                                                        

위의 properties 파일에 내용을 추가해준 후 Tomcat 인스턴스들에게 JvmRoute 설정을 해준다. 이것에는 크게 두가지 방법이 있다. 첫번째로는 System.property에 JVM_OPTS=" ${JVM_OPTS} -DjvmRoute=instance1" 를 추가해주는 방법이 있고, 두번째로는 serverm.xml에 <Engine name="Catalina" defaultHost="localhost" jvmRoute="instance1">를 추가해주는 방법이 있다. 

 

Tomcat의 HTTP 접속 포트 끄기

Apache와 Tomcat의 연동을 하고나면 Tomcat 인스턴스의 HTTP 포트를 Disable 해주어야 한다.
<!--
    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
-->
위 처럼 해당 부분을 주석처리 해주면 mod_jk를 사용한 Apcahe와 Tomcat의 연동작업이 끝이 난다.

 

출처
www.lesstif.com/system-admin/apache-httpd-tomcat-connector-mod_jk-reverse-proxy-mod_proxy-12943367.html
victorydntmd.tistory.com/225
goddaehee.tistory.com/77
반응형