Включение SSL на Rails 4 с помощью AWS Load Balancer Ngnix и Puma

Я безуспешно пытался настроить SSL для своего проекта.

Мой балансировщик нагрузки AWS настроен правильно и принимает ключи сертификатов. Я настроил прослушиватели для маршрутизации трафика порта 80 и трафика порта 443 на мой порт 80 на экземпляре.

Я полагаю, что в экземпляре не требуется никаких дополнительных изменений (Nginx и Puma), поскольку все направляется на порт 80 экземпляра. Я видел примеры, когда сертификат установлен на экземплярах, но я понимаю, что балансировщик нагрузки является точкой завершения SSL, поэтому в этом нет необходимости.

При доступе через http://www.example.com все работает нормально. Однако время доступа через https://www.example.com истекает.

Буду признателен за помощь в правильной настройке высокого уровня.

Изменить: я не получил ответа на этот вопрос. Я полагаю, это слишком общее? Я был бы признателен за подтверждение того, что рассуждения высокого уровня, которые я использую, являются правильными. Я должен установить сертификат только в балансировщике нагрузки и настроить балансировщик нагрузки для приема соединений через порт 443, НО направлять все на порт 80 внутри экземпляров веб-сервера.


person Augusto Samamé Barrientos    schedule 03.02.2016    source источник


Ответы (3)


Я просто наткнулся на этот вопрос, так как у меня была та же проблема: все запросы к https://myapp.com истекли по времени и Я не мог понять, почему. Вот вкратце, как я мог добиться (принудительно) HTTPS в приложении Rails на AWS:

Мое приложение:

Rails 5 с включенным config.force_ssl = true (production.rb) — поэтому все соединения, поступающие с HTTP, будут перенаправлены на HTTPS в приложении Rails. Нет необходимости настраивать сложные правила nginx. В том же приложении использовалось gem 'rack-ssl-enforcer', что и в Rails 4.2.

Примечание. Балансировщики нагрузки AWS использовались в предыдущих HTTP-запросах GET для проверки работоспособности экземпляров (сегодня они поддерживают HTTPS). Поэтому необходимо было определить правила исключений для реализации SSL: Rails 5: config.ssl_options = { redirect: { exclude: -> request { request.path =~ /health-check/ } } } (в production.rb) с соответствующим маршрутом к контроллеру в приложении Rails.

Примечание к примечанию: В Rails 5 инициализатор new_framework_defaults.rb уже определил «ssl_options». Обязательно деактивируйте это перед использованием правила «ssl_options» в production.rb.

АМС:

Настройка Elastic Beanstalk на AWS с действующим сертификатом на балансировщике нагрузки с использованием двух правил прослушивателя:

  1. Запросы HTTP 80 на LB направляются на HTTP 80 на экземплярах.

  2. Запросы HTTPS 443 на LB направляются на HTTP 80 на экземплярах (здесь необходимо применить сертификат)

Вы видите, что балансировщик нагрузки является точкой завершения SSL. Все запросы, поступающие с HTTP, будут проходить через LB, а затем будут автоматически перенаправлены приложением Rails на HTTPS.

То, о чем вам никто не говорит

При этом HTTPS-запрос будет превышать время ожидания (здесь я потратил дни!, чтобы выяснить, почему). В конце концов, это была чрезвычайно простая проблема: группа безопасности LoadBalancer (в консоли AWS -> EC2 -> группы безопасности) принимает запросы только на порт 80 (HTTP) -> просто активируйте также порт 443 (HTTPS). Тогда это должно работать (по крайней мере, это было для меня).

person Michael Fehr    schedule 15.04.2017

Я не знаю, справились ли вы со своей проблемой, но для тех, кто может найти этот вопрос, вот что я сделал, чтобы заставить его работать.

Я весь день читал и нашел сочетание двух конфигураций, которые на данный момент работают.

В основном вам нужно настроить nginx для перенаправления на https, но некоторые из рекомендуемых конфигураций никак не влияют на конфигурацию nginx.

В основном я использую эту конфигурацию gist: https://gist.github.com/petelacey/e35c98f9a35063a89fa9

Но из этой конфигурации я добавил команду для перезапуска сервера nginx: https://gist.github.com/KeithP/f8534c04d20c2b4e4b1d

Я считаю, что когда процессу развертывания eb удается скопировать файлы конфигурации, nginx уже запущен (?), Делая эти изменения бесполезными. Следовательно, необходимо перезапустить вручную, если у кого-то есть лучший подход, сообщите нам об этом.

person Gus    schedule 12.08.2016
comment
Да, я в конце концов решил это. Я опубликую полные файлы конфигурации в ближайшее время. - person Augusto Samamé Barrientos; 13.08.2016
comment
@Augusto Можете ли вы опубликовать эти файлы, чтобы выполнить то же самое? - person Riptyde4; 22.10.2016
comment
Привет. Я сожалею, что я никогда не удосужился опубликовать их. Я найду AMI и опубликую процедуру как можно скорее. - person Augusto Samamé Barrientos; 23.10.2016

Ответ Майкла Фера сработал и должен быть принятым ответом. У меня была та же проблема, я пропустил добавление config.force_ssl = true. С замечанием, что вам не нужно добавлять файл конфигурации ebs, они говорят, что вам нужно добавить, если вы используете балансировщик нагрузки. Это может ввести в заблуждение, и они не указывают это в документах.

person Emil    schedule 07.08.2019
comment
Вместо этого следует добавить это как комментарий к ответу Майкла Фера. - person allenski; 07.08.2019
comment
Извините, у меня не было необходимой репутации, и я подумал, что это может быть полезно для других, я думаю, мне следует быть более активным ^^. - person Emil; 08.08.2019