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
'개발 > 1일1문제해결' 카테고리의 다른 글
[Spring] try-catch에서 @Transactional이 안되는 이유 및 해결 (0) | 2024.04.09 |
---|---|
[REST API] POST 테스트 중 JSON 관련 double-quote 에러 (1) | 2024.03.25 |
[Spring] @Autowired Nullpointexception 오류 해결 (+ Spring Security) (0) | 2024.03.21 |
[Apache] 413 Request Entity Too Large 오류 해결 (0) | 2024.03.07 |
[Spring] @Autowired, @Inject, @Resource 사용법 및 차이 (0) | 2021.07.19 |