0

나는 Elastic Beanstalk을 통해 Spring Boot 응용 프로그램을 배포했습니다. 로드 밸런서를 사용하고 있으므로이 흐름이 이해할 수 있습니다.스프링 부트 및 ELB -로드 밸런서가 http를 https로 리디렉션하도록하려면 어떻게해야합니까?

인터넷/브라우저 요청 --- HTTPS --->로드 밸런서 --- HTTP ---> 스프링 부트 응용 프로그램 서버

기본적으로 SSL은로드 밸런서에서 종료되며 앱 서버는 일반적인 기존 HTTP를 처리합니다.

그러나 브라우저의 HTTP 요청의 경우로드 밸런서가 자동으로 HTTPS로 리디렉션되도록합니다.
Spring Boot with Embedded Tomcat behind AWS ELB - HTTPS redirect
How to redirect automatically to https with Spring Boot
Spring Boot redirect HTTP to HTTPS

그러나 이러한 질문에 대한 답변 중 아무도 나에게 의미가 없습니다 :

는 몇 가지이 문제에 대한 질문이 있습니다. 아마 나는 오해하고있다. 그러나 모든 대답은 기본적으로 Spring Boot app 만 서버 HTTPS 요청을 만든다. (예를 들어 http.requiresChannel().anyRequest().requiresSecure()을 사용할 때).

그러나로드 밸런서에서 종료되는 SSL과 HTTP 만 처리하는 스프링 부트 앱 서버에서 완벽하게 작동하므로이 흐름에 어긋납니다. 따라서 스프링 부트 레벨에서 SSL을 요구하면 엔드 투 엔드 SSL 연결이 필요합니다. 이는 내 애플리케이션에 실제로 필요하지 않습니다.

는 또한 도움이하지 않는 것 다음과 같은 속성을 사용하고 다음 중 하나를

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

나는이 문제가 이미 해결되어 있는지 그리고 난이 중복 인 경우 사과,하지만 난 할 수 없습니다 이것을 알아내는 것 같습니다.

감사합니다. 감사!

답변

0

AWS로드 밸런서는 리디렉션을 보낼 수 없습니다. 그것은 그들이 가지고있는 기능이 아닙니다. 서버 측의 x-forwarded-proto 헤더를 확인하고 https 대신 이 http 인 경우 리디렉션을 리턴해야합니다.

0

AWS로드 밸런서가 리디렉션을 처리 할 수 ​​없습니다. 서버를 통해 또는 클라우드 프론트 배포판을 사용하여 수행 할 수 있습니다.

1

article의 도움을 받아 필자는 ELB 환경에서 Spring Boot 응용 프로그램을 위해이 작업을 수행하는 방법을 마침내 알 수있었습니다.

src/main/webapp/.ebextensions/nginx/conf.d에 conf 파일을 만들어야했습니다. 방금 myconf.conf라고했습니다. HTTP 및 HTTPS 청취자 모두 부하 분산을 위해 열려 있는지 확인하십시오, 또한

server { 
    listen 80; 
    server_name www.my-site.com; 
    if ($http_x_forwarded_proto != "https") { 
     rewrite ^(.*)$ https://$server_name$REQUEST_URI permanent; 
    } 
} 

: myconf.conf에서

, 나는이 코드를 넣어.
로드 밸런서가 SSL을 이미 종료 했으므로 스프링 부트 앱은 HTTP 만 열 수 있습니다.