У меня есть приложение rails на 2 инстансах EC2, на котором запущен nginx за Amazon Elastic Load Balancer. Я хотел бы принудительно включить HTTPS, который работал нормально до того, как я добавил в Load Balancer. Сейчас я не совсем понимаю, как это сделать.
У моего балансировщика нагрузки есть 2 слушателя: от 80 до 80 и от 443 до 80 (с сертификатом ssl).
Я попытался добавить следующее правило перезаписи в конфигурацию nginx, но, похоже, это не сработало:
if ($http_x_forwarded_proto != 'https') {
rewrite ^(.*) https://$host$1 permanent;
}
Любая помощь будет принята с благодарностью!
мы смогли решить эту проблему, выполнив следующие действия:
Сохраняйте конфигурацию вашего ELB, как указано (прослушивание ботов 80 и 443 и пересылка трафика экземплярам на порт 80)
Затем в application_controller.rb
сделайте что-то подобное:
class ApplicationController < ActionController::Base
force_ssl if: :ssl_required?
# rest of your code here
private
def ssl_required?
# If we came in through the load-balancer, this header will be present
if request.headers['X-Forwarded-Proto'].present? && !request.ssl?
return true
end
return false
end
end