2014-08-29 1 views
0

현재 HTTP를 통해 제공되는 작은 하위 페이지가 있어야하지만 HTTPS를 통해 나머지를 제공하는 것이 바람직한 레일 기반 웹 응용 프로그램이 있습니다. 현재 AWS 설정에서 SSL은 탄력적 인로드 밸런서에서 종료되고 내 앱 서버와의 모든 통신은 HTTP를 통해 이루어집니다. 이 때문에 Rack SSL Enforcer 같은 솔루션은 적합하지 않습니다. 현재, 나는 리디렉션을 처리하기 위해 각 페이지에 다음 JS 조각을 제공하고 있습니다 : 이것은 상대적으로 상당한 성능 결과AWS Elastic Load Balancer가 선택적으로 SSL을 활성화합니다.

<% if should_be_ssl? %> 
<script> 
    if (window.location.protocol != "https:"){ 
    window.location.href = "https:" + window.location.href.substring(window.location.protocol.length); 
    } 
</script> 
<% else %> 
<script> 
if (window.location.protocol != "http:"){ 
    window.location.href = "http:" + window.location.href.substring(window.location.protocol.length); 
} 
</script> 
<% end %> 

다음 페이지 중 하나에 액세스 할 때마다했다. SSL을 통해 특정 페이지를 선택적으로 제공하고로드 밸런서 수준에서이를 제어하는 ​​방법을 알고있는 사람이 있습니까?

답변

1

현재 ELB 자체에서는 지원되지 않지만 ELB는 X-Forwarded-Proto 헤더를 제공합니다. 이것을 검사하여 클라이언트의 요청이 HTTPS를 통한 것인지 여부를 확인할 수 있습니다. 그런 다음 필요한 경우 페이지 콘텐츠가 아닌 리디렉션 응답을 제공 할 수 있습니다. 자세한 내용은 AWS 녀석의 this blog post을 참조하십시오.

당신은 rack ssl enforcer에 대한 문서를 보면이 논리 중 하나

미들웨어
  1. , 예를 들어, 랙 SSL-집행자

    를 구현해야합니다, IT는 밖으로 X-Forwarded-Proto을 지원하기 위해 나타납니다 상자, 그래서 아무것도 할 필요가 없을 수도 있습니다. the source에서 헤더가 존중된다는 것을 알 수 있습니다. (아마 리디렉션 응답 보다는 클라이언트) 리버스 프록시에서

  2. , 예를 들어, 응용 프로그램에서

  3. 앱 서버와 ELB

    acl is_http hdr(X-Forwarded-Proto) http 
    acl account_login url_beg /account/login 
    redirect scheme https code 301 if account_login is_http 
    

사이의 haproxy는 헤더를 확인하는 것 무엇이든 ELB 사이 다른 리버스 프록시가있는 경우, 당신은 X-Forwarded-Proto을 통과하는 사람들을 구성해야 할 수 있습니다, 구성에 따라 머리글 올바르게. 예를 들어, this issue을 참조하십시오.

+0

감사합니다. Joe! 오늘 이것을 확인해보고 이것이 저에게 효과가 있는지 알려 드리겠습니다. –

+0

이봐, @ DanL. 어떻게 된거야? rack-ssl-enforcer가 작업을 완료 했습니까? –

+0

도움에 감사드립니다. –