Application Servers & Java

[4편] mod_proxy_ajp를 이용한 Apache-Tomcat 연동 실무 가이드

midworker 2025. 5. 16. 22:25
반응형

[4편] mod_proxy_ajp를 이용한 Apache-Tomcat 연동 실무 가이드

이전 3편까지 Apache, Tomcat의 설치 및 설정을 마쳤다면 이제 두 서비스를 연동하여 하나의 웹 시스템으로 운영해야 합니다.
이번 편에서는 mod_proxy_ajp를 활용한 Apache-Tomcat 연동 실무 설정을 정리합니다.


✅ Apache-Tomcat 연동 방식 비교

방식 설명 장점 단점
mod_jk 별도 모듈(mod_jk.so)을 통해 AJP 프로토콜로 연동 고성능, 정교한 로드밸런싱 설정 파일 복잡, 유지 어려움
mod_proxy_ajp Apache 기본 모듈로 AJP 연동 설정 단순, Apache 2.4 이상 기본 포함 성능과 기능 제한적
mod_proxy_http HTTP 기반 프록시 연동 HTTPS 환경 대응 유리 헤더 전송 한계, 세션 공유 복잡

✅ mod_proxy_ajp 구성 흐름

[Client] → [Apache:80] --AJP--> [Tomcat:8009]

✅ Apache 설정 예시 (httpd.conf)

🔹 mod_proxy 모듈 활성화 확인

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

🔹 AJP 프록시 연동 설정

<IfModule mod_proxy.c>
    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy balancer://tomcat-cluster>
        BalancerMember ajp://127.0.0.1:8009 route=tomcat1
        ProxySet stickysession=JSESSIONID
    </Proxy>

    ProxyPass /app/ balancer://tomcat-cluster/app/
    ProxyPassReverse /app/ balancer://tomcat-cluster/app/
</IfModule>

route=tomcat1은 Tomcat의 jvmRoute 설정과 일치해야 함


✅ Tomcat 설정 (server.xml)

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
    ...
</Engine>
<Connector port="8009" protocol="AJP/1.3"
           connectionTimeout="20000"
           redirectPort="8443" />

✅ Sticky Session이 필요한 이유

  • 클러스터 환경에서 세션이 유지되도록 하기 위해 사용
  • Apache는 JSESSIONID 쿠키의 route 값을 읽고 해당 서버로 트래픽 전달

예:

JSESSIONID=1234567890ABCDEF.tomcat1

✅ 설정 확인 및 테스트

1. Apache 재기동

systemctl restart httpd

2. Tomcat 로그 확인

  • /logs/localhost_access_log.*.txt 로 AJP 요청이 정상 유입되는지 확인

3. 브라우저 쿠키 확인

  • 개발자 도구 > JSESSIONID 값 확인 → tomcat1 route가 붙어야 정상

✅ 트러블슈팅 포인트

증상 원인
502 Bad Gateway Tomcat 미기동 or AJP 포트 오류
세션 초기화 반복 jvmRoute 불일치, stickySession 미설정
프록시 헤더 누락 ProxyPreserveHost 미설정

✅ 마무리

mod_proxy_ajpmod_jk보다 설정이 간단하고 Apache 내장 모듈이므로 별도 빌드 없이도 연동이 가능합니다.
클러스터 구성과 세션 유지를 위해 route 설정과 ProxySet stickysession 조합은 꼭 확인해야 합니다.

반응형