Mixed Content란?
- Google은 https 사이트에서 http 컨텐츠가 혼합이 된 경우를 https 보안에 있어 큰 문제라 생각하여 크롬에서는 이를 차단시켰습니다.
배포
- Nginx + Spring Boot 2.6.6(with Embedded Tomcat) + Spring Security 조합
- Nginx에서 ssl http2 적용
- Spring 구현 서버에서 Spring Security를 이용하여 ThirdParty Login을 지원
- ThirdParty Login 관련 토큰 값이 없거나 유효하지 않은 경우, Spring Security가 로그인 페이지로 리다이렉트
→ 문제! 리다이렉트하라고 내려준 Location의 정보가 HTTP로 되어 있음
- Mixed Content 발생(HTTPS에서 HTTP를 호출해야하기 때문)
원인
- Spring Security는 Tomcat으로 올린 서버에 설정되어있는데, 이는 https로 떠있음을 인지하지 못함 : HTTPS는 NGINX에 설정했기 때문
- 따라서, location 헤더에 ThirdParty 로그인 Redirect Page를 HTTP 프로토콜이라고 알려줌
- HTTPS로 요청한 부분에서, HTTP로 Redirect 하라고 정보가 내려오니 Mixed Content 문제 발생
해결 방안
- Nginx location 블록 아래에
proxy_set_header X-Forwarded-Proto $scheme;
코드 적용
- Spring application.yml에 해당 코드 추가
server.tomcat.use-relative-redirects=true
출처
아래 출처와 개발바닥 커뮤니티에서 나온 의견을 통해서 해당 문제 해결했습니다.
https://velog.io/@jamie/mixed-content-error