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 요청시 블럭 발생
해당 프로젝트는 로드 밸런서 뒤에 어플리케이션이 있는 구성입니다.
Spring HATEOAS https 관련해서 검색을 해보니, 기본적으로 Spring Framework 인프라를 사용하여 들어오는 요청의 프로토콜 정보를 사용합니다.
_links의 link값이 http://~~로 된 api를 리턴하고, 해당 api호출 시 위와 같은 에러가 발생하게 됩니다.
해결방법
x-forwarded-* 헤더를 사용해 문제 해결이 가능합니다.
- x-forwarded-proto 원래 요청의 프로토콜(HTTP/HTTPS)
- x-forwarded-port 원래 요청의 포트
필터 등록
ForwardedHeaderFilter은 "Forwarded" 및 "X-Forwarded-*" 헤더에서 값을 추출하고, 요청과 응답을 래핑하고, 클라이언트에서 시작된 프로토콜과 주소를 반영하도록 만듭니다.
모든 X-Forwarded-… 헤더를 처리하는 서블릿 필터가 생성되고, 서블릿 핸들러에 올바르게 등록됩니다.
@Bean
FilterRegistrationBean<ForwardedHeaderFilter> forwardedHeaderFilter() {
FilterRegistrationBean<ForwardedHeaderFilter> bean = new FilterRegistrationBean<>();
bean.setFilter(new ForwardedHeaderFilter());
return bean;
}
properties or yaml 아래 옵션 추가
server.forward-headers-strategy=framework
참고 :
https://github.com/spring-projects/spring-hateoas/issues/461
https://github.com/spring-projects/spring-hateoas/issues/107
좋은글! https://tomgregory.com/aws/spring-boot-behind-load-balancer-using-x-forwarded-headers/
728x90