[구성]
JBCS - JBoss7(proxy) - stream(망연계) - JBoss6
[현상]
1) JBoss7(proxy)에서 request dump의 header 값의 XFF 확인 시 client ip 출력
2) JBoss7(proxy) - stream(망연계)의 tcpdump 확인 시 header값의 XFF가 JBCS의 ip가 출력됨
3) JBoss6에서 request dump의 header값의 XFF 확인 시 jbcs의 ip가 출력됨
=> JBoss7(proxy)에서 stream(망연계)로 넘어가면서 header값의 XFF ip가 변경됨
JBCS(Apache) 서버의 XFF 설정이 되어 있다는 전제하에 JBoss 설정 필요
apache 서버 XFF 설정 방법)
https://coldplayer83.tistory.com/193
24. X-Forwarded-For(XFF) 설정
http://www.chlux.co.kr/bbs/board.php?bo_table=board02&wr_id=104 클럭스클럭스, S/W 프로젝트www.chlux.co.kr XFF : HTTP Header 중 하나로 HTTP Server 에 요청한 clinet 의 IP 를 식별하기 위한 사실상의 표준 웹 서버나 WAS 앞에
coldplayer83.tistory.com
JBoss7(proxy) 서버의 standalone-ha.xml에 다음과 같이 설정
<host name="default-host" alias="localhost">
<access-log pattern="%h %l X-Forwarded-For: %{i,X-Forwarded-For} %u %t %r %s %b %S %I %T"/>
<filter-ref name="preserve-x-forwarded"/>
<filter-ref name="requestDumperExpression"/>
<http-invoker http-authentication-factory="application-http-authentication"/>
</host>
<filters>
<expression-filter name="preserve-x-forwarded" expression="set(attribute='%{i,Original-X-Forwarded-For}', value='%{i,X-Forwarded-For}')"/>
<expression-filter name="requestDumperExpression" expression="dump-request"/>
</filters>
✅ access-log
%h : 실제 접속한 peer IP (보통 바로 앞 프록시 IP)
%{i,X-Forwarded-For} : 헤더에 담긴 클라이언트 IP 체인
로그에서 프록시 IP vs 실제 클라이언트 IP 비교 가능
✅ preserve-x-forwarded
요청에 들어온 X-Forwarded-For 값을 Original-X-Forwarded-For라는 새 헤더로 복사
이후 단계(다음 프록시, WAS, 로그)에서 XFF가 덮어써져도 원본 XFF 추적 가능
👉 다단 프록시 구조에서 매우 좋은 설정
✅ requestDumperExpression
요청 헤더/파라미터를 서버 로그에 덤프
문제 분석용 (운영 환경에서는 로그 과다 주의)
순서대로 설정해야 함
<filter-ref name="preserve-x-forwarded"/>
<filter-ref name="requestDumperExpression"/>
먼저 XFF 보존 -> 그 다음 요청 덤프
=> dump-request 로그에 Original-X-Forwarded-For 포함됨
[ Client ]
|
| (1) 최초 요청
| REMOTE_ADDR = 203.0.113.10
| X-Forwarded-For = (없음)
v
┌────────────────────┐
│ JBCS (Apache) │
│ Front Web Server │
└────────────────────┘
|
| (2) XFF 생성
| X-Forwarded-For = 203.0.113.10
| REMOTE_ADDR = 10.0.0.1
v
┌────────────────────┐
│ JBoss7 │
│ Reverse Proxy │
│ (Undertow) │
└────────────────────┘
|
| (3) XFF 보존 + 전달
| Original-X-Forwarded-For = 203.0.113.10
| X-Forwarded-For = 203.0.113.10, 10.0.0.2
| REMOTE_ADDR = 10.0.0.2
v
┌────────────────────┐
│ Stream / 망연계 │
│ (L4/L7 Proxy) │
└────────────────────┘
|
| (4) XFF append
| X-Forwarded-For =
| 203.0.113.10, 10.0.0.2, 172.16.0.5
| REMOTE_ADDR = 172.16.0.5
v
┌────────────────────┐
│ JBoss6 / JBoss WAS │
│ Application Server │
└────────────────────┘
Backend JBoss 서버 Request Dump 확인
- Client IP: 192.168.22.1
- JBCS Apache IP: 192.168.22.30
- JBoss Proxy IP: 192.168.22.21
- JBoss backend IP: 192.168.22.31
# JBCS Apache 에서 backend WAS 컨텍스트 호출시 JBoss backend 서버의 Request Dump 의 해더 정보에 X-Forwarded-For, Original-X-Forwarded-For 의 IP 가 Client IP: 192.168.22.1(테스트 서버 kvm 환경의 Gateway) 인 것 을 확인
• Backend JBoss 서버 Request Dump 정보
==============================================================
2026-01-09 04:18:28,682 INFO [io.undertow.request.dump] (default task-1)
----------------------------REQUEST---------------------------
URI=/welcome/
characterEncoding=null
contentLength=0
contentType=null
header=Accept=*/*
header=X-Forwarded-Server=192.168.22.30 <— JBCS Apache IP
header=User-Agent=curl/7.76.1
header=X-Forwarded-Proto=http
header=X-Forwarded-Port=80
header=X-Forwarded-For=192.168.22.1 <-- Client IP
header=Original-X-Forwarded-For=192.168.22.1 <-- Client IP
header=Content-Length=0
header=Host=192.168.22.30
header=X-Forwarded-Host=(null)
locale=[]
method=GET
protocol=HTTP/1.1
queryString=
remoteAddr=/192.168.22.21:49178 <-- JBoss reverse Proxy IP
remoteHost=192.168.22.21 <-- JBoss reverse Proxy IP
scheme=http
host=192.168.22.30
serverPort=8081
isSecure=false
--------------------------RESPONSE--------------------------
contentLength=24
contentType=text/html;charset=ISO-8859-1
cookie=JSESSIONID=B_TmJbN2kUsrkFTo2gdS6FCEZggoPdFB_BniAXsC.AP_name10; domain=null; path=/welcome
header=Connection=keep-alive
header=X-Powered-By=JSP/2.3
header=Set-Cookie=JSESSIONID=B_TmJbN2kUsrkFTo2gdS6FCEZggoPdFB_BniAXsC.AP_name10; path=/welcome
header=Content-Type=text/html;charset=ISO-8859-1
header=Content-Length=24
header=Date=Fri, 09 Jan 2026 09:18:28 GMT
status=200
=============================================================='WAS > JBOSS_WILDFLY' 카테고리의 다른 글
| 32. deployment-info (0) | 2026.01.23 |
|---|---|
| 31. 언어 설정 변경(charset) (0) | 2026.01.22 |
| 29. MODCLUSTER 에러 메세지 (0) | 2026.01.12 |
| [ERROR] ISPN000136 / WFLYCLWEBINF0004 / ISPN000299 15초 간격으로 반복되는 infinispan error (0) | 2025.12.26 |
| 28. 핸들러(handler) (0) | 2025.12.15 |