본문 바로가기
Server/Apache

Web Server와 ServletContainer의 통신 (AJP)

by JunHeeLim 2022. 12. 2.

WAS, web application container로 web server와 servlet(web) container로 구성되어있다.

WAS라고 하면 대표적으로 Tomcat을 생각할 것이다.

아래는 WAS의 구조이다.

WAS

혼선이 있을 수 있어 부가적인 설명을 붙인다. WAS는 Web Container에서 jsp와 servlet을 모두 처리하며, JSP는 Servlet을 확장한 기술로서 Servlet Container, 즉 동적 데이터를 처리하는 Container이다.

 

Web server라하면 apache, nginx가 대표적이다. 여기서 의문점이 하나 생긴다. WAS, 즉 web server를 포함하고 있는 tomcat을 이용하는데 왜 Web server를 추가적으로 이용하는 것일까?

  • 정적인 컨텐츠와 동적인 컨텐츠를 분리하여 부하를 방지한다.
  • 물리적인 분리로 보안을 강화할 수 있다.
  • 여러대의 WAS를 연결지을 수 있다.

위 외에도 여러 장점이 있으나, 서론이 길어지기에 상세한 내용은 생략하겠다.

 

여기서 이번 글의 핵심 주제는 "여러대의 WAS를 연결 지을 수 있다" 이다.


Apache httpd web server와 Tomcat을 연계하는 방법에는 크게 3가지 방식이 있다.

  • AJP Protocol을 이용한 연결 방식 (mod_jk)
  • Reverse Proxy를 이용하는 연결 방식 (mod_proxy)
  • AJP Protocol을 Reverse Proxy로 이용하는 연결 방식 (mod_proxy_ajp)
연결 방식 장점 단점
mod_jk JkMount 옵션을 이용하여 URL등으로
유연한 설정이 가능하다.
mod_proxy에 비해 빠른 동작을 한다.
별도의 모듈을 설치해야하며
Tomcat 전용이다.
mod_proxy Apache의 기본 모듈이다.
WAS에 종속되지 않는다.
URL에 따른 유연한 설정이 어려우며
Proxy Pass Match를 이용해야한다.
mod_proxy_ajp

 

위 3가지 연결 방식 중 URL을 통한 유연한 설정이 가능한 mod_jk 방식을 적용하는 방법에 대해 작성하겠다.

설명에 앞서 유의할 점은 파일의 위치는 절대적인 경로가 아님을 인지하고 참고하기를 바란다.

mod_jk url mapping

 

Apache 설치 경로의 Conf directory로 이동한다. 여기서 Conf는 apache 설정 파일이 모여있는 디렉토리이다.

apache configure directory

workers.properties 파일이 있다면 vi를 통해 진입하고 아니라면 touch를 통해 생성 바란다.

해당 파일은 tomcat 연동에 관여할 worker에 대한 정보들을 작성하는 property이다.

정말 많은 설정이 있어 아래 apache doc 경로를 첨부한다.

https://tomcat.apache.org/connectors-doc/reference/workers.html

 

 

The Apache Tomcat Connectors - Reference Guide (1.2.48) - workers.properties configuration

This table lists more advanced configuration options. Most of them only apply to some types of workers. We use the abbreviations AJP for ajp13/ajp14 workers used directly via the workers.list, LB for load balancer workers, and SUB for the workers used indi

tomcat.apache.org

 

ex)

worker.tomcat_home = /data/tomcat-example.com

worker.java_home = /usr/local/java

worker.list = exmaple_platform

worker.example_platform.port = 8080

worker.example_platform.lbfactor = 1

worker.example_platform.connection_pool_timeout = 600

 

workers.properties를 설정했다면 다음으로는 httpd 설정이다. extra directory로 이동한다.

ifconfig로 inet을 확인하고 httpd-vhosts.conf 파일을 열어준다.

 

<VirtualHost {inet}:80>

   SeverAdmin admin@example.com

   DocumentRoot "/data/apache/htdocs/{프로젝트 소스가 존재하는 directory}"

   ServerName {도메인 주소}

   ErrorLog "{로그를 저장할 디렉토리 및 로그 파일명 형식}"
   CustomLog "{로그를 저장할 디렉토리 및  로그 파일명 형식}"
   JkMount {마운트 시킬 path ( ex -> /* ) } {Tomcat server.xml에 명시한 Service 이름}

   

  // 소캣 프로그래밍이 필요할 경우

   KeepAlive On

   ProxyPass /websocket ws://localhost:{port}/{path}
</VirtualHost>

 

 

 

AWS Load Balancers

AWS Load Balancer의 Port 별 Listener 규칙을 통해 여러 도메인을 한개의 EC2로 라우팅하고

Apache AJP 통신을 통해 도메인 별로 각 tomcat 서버로 라우팅 시켜준다.

댓글