[etc] Nginx Origin URI into proxy pass

톰켓 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 를 통해 접근하는지를 판단 할 수 있다.

글쓴이