톰켓 proxypass 시에 header 에 Original URI 전달하기. 헤더값에 original URI 정보 입력하는 법 테스트 .. 톰켓과 같은 어플리케이션 서버 앞에 일반적으로 nginx 를 이용한 리저브 프록시 형태의 서비스를 이용하는데 있어, 다음과 같이 커스텀한 헤더나 혹은 Extend 헤더를 추가함으로 was에서 들어오는 request 에 대한 형태를 판단 할 수 있습니다. 관련해서 proxy backend 로 넘겨줄 때 X-Original-URI 말고 X-forwarded-URI 로도 넘겨주는 방법(동일?) 선택하면 될듯합니다. nginx 설정 header 의 X-Original-URI location / { proxy_set_header X-Original-URI $request_uri; proxy_pass http://127.0.0.1:8080/; } location /testuri/ { proxy_set_header X-Original-URI $request_uri; proxy_pass http://127.0.0.1:8080/; } 테스트를 위해 nginx 의 로케이션이 상이한 두개의 경우에도 동일하게 톰켓의 루트 ( / ) 로 프록시 되도록 설정을 해두었다. 위와 같은 경우 was 의 access 로그를 확인하게 되면 웹서버의 "/$uri" 및 "/testuri/$uri" 는 동일하게 패싱된다. 이런 경우 실제 nginx로 포함되는 request_uri를 프록시 과정에 X-Origin-URI 헤더로 셋업하여 전달해준다. 이후 java 설정에서 아래와 같이 헤더정보를 가져오게 되면 request.getHeader("X-Original-URI"); 실제로 들어오는 요청에 대한 값을 판단 할 수 있게된다. 실제 패킷 분석 시 헤더 결과 (톰켓으로 넘어가는 loopback 8080 캡쳐 : # tcpdump –i lo –qexX port 8080) get http://test.hongstalk.com/ 09:54:56.618161 00:00:00:00:00:00 (oui Ethernet) > 00:00:00:00:00:00 (oui Ethernet), IPv4, length 623: localhost.47502 > localhost.webcache: tcp 557 0x0000: 4500 0261 210a 4000 4006 198b 7f00 0001 E..a!.@.@....... 0x0010: 7f00 0001 b98e 1f90 7f44 b41a 86a9 4ace .........D....J. 0x0020: 8018 0200 0056 0000 0101 080a 4fc9 9511 .....V......O... 0x0030: 4fc9 9511 4745 5420 2f20 4854 5450 2f31 O...GET./.HTTP/1 0x0040: 2e30 0d0a 582d 4f72 6967 696e 616c 2d55 .0..X-Original-U 0x0050: 5249 3a20 2f0d 0a48 6f73 743a 2031 3237 RI:./..Host:.127 get http://test.hongstalk.com/testuri 09:58:54.909510 00:00:00:00:00:00 (oui Ethernet) > 00:00:00:00:00:00 (oui Ethernet), IPv4, length 543: localhost.47504 > localhost.webcache: tcp 477 0x0000: 4500 0211 f02b 4000 4006 4ab9 7f00 0001 E....+@.@.J..... 0x0010: 7f00 0001 b990 1f90 59d0 c7ce 9d52 e649 ........Y....R.I 0x0020: 8018 0200 0006 0000 0101 080a 4fcd 37e4 ............O.7. 0x0030: 4fcd 37e4 4745 5420 2f20 4854 5450 2f31 O.7.GET./.HTTP/1 0x0040: 2e30 0d0a 582d 4f72 6967 696e 616c 2d55 .0..X-Original-U 0x0050: 5249 3a20 2f74 6573 7475 7269 0d0a 486f RI:./testuri..Ho
테스트 과정에서 볼 수 있듯이, 루프백 어뎁터를 통해 실제 톰켓 으로 GET 을 통해서 / 에대한 요청이 들어오는건 두 요청이 모두 동일하지만, X-origin-URI 헤더를 추가함으로써, 실제 웹 서버로 어떤 request 를 통해 접근하는지를 판단 할 수 있다.