Web-WAS 연동

Web Server가 Reverse Proxy, AJP, 헤더 전달을 통해 WAS와 연동하는 방식을 정리한다.


Web에서 WAS로 넘어가는 구간

Client
  -> Web Server
  -> WAS
  -> Application

연동의 의미

Web-WAS 연동은 Web Server가 받은 요청을 내부 WAS로 전달하고, WAS 응답을 다시 클라이언트로 돌려주는 구성이다.

연동 방식

방식설명예시
HTTP Reverse ProxyWeb Server가 HTTP로 WAS에 요청 전달Nginx proxy_pass, Apache ProxyPass
AJPWeb Server와 Tomcat 사이 전용 프로토콜Apache mod_proxy_ajp, mod_jk
L4 전달TCP 레벨에서 포트 전달Load Balancer -> Tomcat

일반적인 학습과 운영에서는 HTTP Reverse Proxy부터 이해하는 것이 좋다. 구조가 단순하고 로그와 테스트가 쉽다.

구체적인 제품 설정은 다음 문서에서 나눠서 본다.

Reverse Proxy 흐름

Client -> https://example.com/app
  -> Nginx/Apache : 443
  -> Tomcat       : 8080
  -> Application  : /app

외부 사용자는 example.com만 본다. Tomcat의 8080 포트는 내부 통신용으로 둔다.

Nginx 예시

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Apache HTTP Server 예시

<VirtualHost *:80>
    ServerName example.com

    ProxyPreserveHost On
    ProxyPass "/" "http://127.0.0.1:8080/"
    ProxyPassReverse "/" "http://127.0.0.1:8080/"
</VirtualHost>

프록시 헤더

WAS 입장에서는 직접 클라이언트를 만나는 것이 아니라 Web Server를 통해 요청을 받는다. 따라서 원래 클라이언트 정보는 헤더로 전달해야 한다.

헤더의미
Host원래 요청 Host
X-Real-IP클라이언트 실제 IP
X-Forwarded-For프록시를 거친 IP 목록
X-Forwarded-Proto원래 요청 프로토콜 http 또는 https
X-Forwarded-Host원래 요청 Host

애플리케이션에서 실제 IP, HTTPS 여부, redirect URL을 판단한다면 이 헤더들이 중요하다.

AJP를 볼 때의 기준

AJP는 Apache HTTP Server와 Tomcat 연동에서 자주 보던 방식이다. HTTP 프록시보다 전용 연동에 가깝지만, 운영에서는 보안 설정이 중요하다.

확인 항목내용
포트Tomcat AJP 기본 포트는 8009
노출 범위외부 공개 금지, 내부 통신만 허용
인증Tomcat 버전에 따라 secret 설정 확인
대안단순 구성에서는 HTTP Reverse Proxy가 이해와 운영이 쉽다

장애별 관점

증상확인 지점
502WAS 포트, upstream 주소, Tomcat 기동 상태
404Web Server path rewrite, Tomcat Context Path
redirect가 이상함X-Forwarded-Proto, Host, application base URL
실제 IP가 Web Server IP로 보임X-Forwarded-For, WAS/application real IP 처리
파일 업로드 실패body size, timeout, proxy buffer

점검 명령

nginx -t
httpd -t
ss -lntp
curl -I http://127.0.0.1:8080
tail -f /var/log/nginx/error.log
tail -f $CATALINA_BASE/logs/catalina.out

관련 블로그 기록

닫기 전 질문

  • Web Server가 넘기는 upstream 주소와 Tomcat Connector 포트는 일치하는가?
  • 원래 클라이언트 IP와 HTTPS 여부를 WAS가 알 수 있는가?
  • 404가 Web Server 경로 문제인지 Tomcat Context 문제인지 어떻게 구분할 것인가?