Web-WAS 연동
Web Server가 Reverse Proxy, AJP, 헤더 전달을 통해 WAS와 연동하는 방식을 정리한다.
Web에서 WAS로 넘어가는 구간
Client
-> Web Server
-> WAS
-> Application
연동의 의미
Web-WAS 연동은 Web Server가 받은 요청을 내부 WAS로 전달하고, WAS 응답을 다시 클라이언트로 돌려주는 구성이다.
연동 방식
| 방식 | 설명 | 예시 |
|---|---|---|
| HTTP Reverse Proxy | Web Server가 HTTP로 WAS에 요청 전달 | Nginx proxy_pass, Apache ProxyPass |
| AJP | Web Server와 Tomcat 사이 전용 프로토콜 | Apache mod_proxy_ajp, mod_jk |
| L4 전달 | TCP 레벨에서 포트 전달 | Load Balancer -> Tomcat |
일반적인 학습과 운영에서는 HTTP Reverse Proxy부터 이해하는 것이 좋다. 구조가 단순하고 로그와 테스트가 쉽다.
구체적인 제품 설정은 다음 문서에서 나눠서 본다.
- Apache httpd-Tomcat mod_proxy 연동
- Apache httpd-Tomcat mod_jk 연동
- Nginx-Tomcat Reverse Proxy 연동
- Apache httpd-Tomcat mod_proxy_ajp 연동
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가 이해와 운영이 쉽다 |
장애별 관점
| 증상 | 확인 지점 |
|---|---|
| 502 | WAS 포트, upstream 주소, Tomcat 기동 상태 |
| 404 | Web 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
관련 블로그 기록
- LB·WAF 뒤에서 클라이언트 실제 IP 살리기 —
X-Forwarded-For와 실제 클라이언트 IP를 추적한 사례 - NGINX 부하분산 (HTTP / TCP) — Nginx upstream 설정으로 backend에 요청을 분산한 사례
닫기 전 질문
- Web Server가 넘기는 upstream 주소와 Tomcat Connector 포트는 일치하는가?
- 원래 클라이언트 IP와 HTTPS 여부를 WAS가 알 수 있는가?
- 404가 Web Server 경로 문제인지 Tomcat Context 문제인지 어떻게 구분할 것인가?