개발/1일1문제해결

[Tomcat] http로 redirect 되는 문제 (X-Forwarded 헤더)

Gamii 2024. 3. 24. 23:15
728x90

[문제]

Nginx의 Ingress 설정으로 인해 https 요청이 오면 http로 변경돼서, tomcat에서 redirect를 http로 하는 문제점이 있었다. 클라이언트가 요청한 프로토콜로 redirect를 해주는 수정이 필요했다.

 

 

[개념]

  • X-Forwarded-For(XFF)란?
    X-Forwarded-For(XFF) 헤더는 HTTP 요청 헤더 중 하나로, 클라이언트의 IP 주소를 식별하는 데 사용된다. 주로 프록시 서버나 로드 밸런서를 사용할 때, 클라이언트의 원래 IP 주소를 전달하기 위해 사용된다. 

    프록시 서버나 로드 밸런서를 거친 경우, 웹 서버는 클라이언트의 실제 IP 주소가 아닌 프록시 서버나 로드 밸런서의 IP 주소를 받게 된다. 이때 X-Forwarded-For 헤더를 사용하면, 프록시 서버나 로드 밸런서가 이 헤더를 추가하고 클라이언트의 원래 IP 주소를 전달한다.


  • X-Forwarded-Proto(XFP)란?
    X-Forwarded-Proto (XFP) 헤더는 클라이언트가 프록시 또는 로드 밸런서에 접속하는데에 사용했던 프로토콜(HTTP 또는 HTTPS)이 무엇인지 확인하는 사실상의 표준 헤더 입니다. 클라이언트와 로드 밸런서 간에 사용된 프로토콜을 확인하려면 X-Forwarded-Proto 요청 헤더를 사용하면 된다.


  • X-Forwarded-Port란?
    X-Forwarded-Port 요청 헤더는 클라이언트가 로드 밸런서 연결에 사용한 대상 포트를 식별하는 데 도움을 줍니다.

 

 

 

[해결]

Tomcat 설정을 클라이언트의 정보인 X-Forwarded 헤더 속성을 활용해 프로토콜을 유지 시킬수 있다.

 

1) 외장 톰캣 설정

server.xml 하단에 아래 코드를 추가해준다.

<Valve className="org.apache.catalina.valves.RemoteIpValve"
      remoteIpHeader="x-forwarded-for"
      proxiesHeader="x-forwarded-by"
      protocolHeader="x-forwarded-proto" />

 

 

 

2) embeded 톰캣 설정

application.properties 파일에 아래 코드 추가해준다.

server.tomcat.remote-ip-header=x-forwarded-for
server.tomcat.protocol-header=x-forwarded-proto

 

 

 

 

 

 

참고)

https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/X-Forwarded-Proto

 

X-Forwarded-Proto - HTTP | MDN

X-Forwarded-Proto (XFP) 헤더는 클라이언트가 당신의 프록시 또는 로드 밸런서에 접속하는데에 사용했던 프로토콜(HTTP 또는 HTTPS)이 무엇인지 확인하는 사실상의 표준 헤더 입니다. 당신의 서버 접근

developer.mozilla.org

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/application/x-forwarded-headers.html

 

HTTP 헤더 및 Application Load Balancer - Elastic Load Balancing

클라이언트 포트 보존 속성(routing.http.xff_client_port.enabled)을 활성화하고 routing.http.xff_header_processing.mode 속성에 preserve 또는 remove을(를) 선택할 경우 Application Load Balancer는 클라이언트 포트 보존 속

docs.aws.amazon.com