2014-08-29 5 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. Затем вы можете использовать ответ перенаправления, а не содержимое страницы. См. this blog post от ребята AWS для получения дополнительной информации.

Вы должны реализовать эту логику либо

  1. с промежуточным слоем, например, для монтажа в стойку Ssl-Инфорсере

    Глядя на документации для rack ssl enforcer, оказывается поддержка X-Forwarded-Proto из ряда box, , так что вам, возможно, ничего не нужно делать. Вы можете видеть в the source, что заголовок соблюден.

  2. в приложении (возможно с ответом перенаправления , а не на клиенте)

  3. в обратный прокси-сервер, например, HAProxy между сервером приложений и УДР

    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 
    

В зависимости от конфигурации, если у вас есть какие-либо другие обратные прокси между УДРА и что бы ни проверкой заголовка, возможно, потребуется настроить те передать X-Forwarded-Proto правильно. См., Например, this issue.

+0

Спасибо, Джо! Я проверю это сегодня и дам вам знать, работает ли это для меня. –

+0

Эй, @ DanL. Как прошло? Был ли стойка-ssl-исполнитель до этой задачи? –

+0

Это было, спасибо за помощь! –

Смежные вопросы