Hello

[Spring HATEOAS] 프록시 서버 및 로드 밸런서 사용 시 http 링크 문제 본문

spring

[Spring HATEOAS] 프록시 서버 및 로드 밸런서 사용 시 http 링크 문제

nari0_0 2024. 6. 17. 11:52
728x90

문제 상황

프로젝트에 Spring HATEOAS를 도입 후 리얼에 반영해 에러가 발생했습니다.

Mixed Content: The page at 'https://aaa.com/view/1' was loaded over HTTPS, 
but requested an insecure XMLHttpRequest endpoint 'http://aaa.com/api/1'. 
This request has been blocked; the content must be served over HTTPS.

-> HTTPS에서 HTTP 요청시 블럭 발생

 

해당 프로젝트는 로드 밸런서 뒤에 어플리케이션이 있는 구성입니다.

출처 : tomgregory.com

Spring HATEOAS https 관련해서 검색을 해보니, 기본적으로 Spring Framework 인프라를 사용하여 들어오는 요청의 프로토콜 정보를 사용합니다.

_links의 link값이 http://~~로 된 api를 리턴하고, 해당 api호출 시 위와 같은 에러가 발생하게 됩니다.

 

해결방법

x-forwarded-* 헤더를 사용해 문제 해결이 가능합니다.

  • x-forwarded-proto 원래 요청의 프로토콜(HTTP/HTTPS)
  • x-forwarded-port 원래 요청의 포트

방법 1

필터 등록

ForwardedHeaderFilter은 "Forwarded" 및 "X-Forwarded-*" 헤더에서 값을 추출하고, 요청과 응답을 래핑하고, 클라이언트에서 시작된 프로토콜과 주소를 반영하도록 만듭니다.

모든 X-Forwarded-… 헤더를 처리하는 서블릿 필터가 생성되고, 서블릿 핸들러에 올바르게 등록됩니다.

@Bean
FilterRegistrationBean<ForwardedHeaderFilter> forwardedHeaderFilter() {
    FilterRegistrationBean<ForwardedHeaderFilter> bean = new FilterRegistrationBean<>();
    bean.setFilter(new ForwardedHeaderFilter());
    return bean;
}

방법 2

properties or yaml 아래 옵션 추가

server.forward-headers-strategy=framework

 

참고 : 

https://docs.spring.io/spring-hateoas/docs/current/reference/html/#server.link-builder.forwarded-headers

https://github.com/spring-projects/spring-hateoas/issues/461

https://velog.io/@on5949/Spring-Boot-%ED%94%84%EB%A1%9D%EC%8B%9C-X-Forwarded-%ED%97%A4%EB%8D%94-%EC%B2%98%EB%A6%AC#forward-headers-strategy

https://github.com/spring-projects/spring-hateoas/issues/107

좋은글! https://tomgregory.com/aws/spring-boot-behind-load-balancer-using-x-forwarded-headers/

 

728x90