SSL с Ruby on Rails
Что мне нужно сделать, чтобы получить трафик на мой рубин в приложении rails для использования https? У меня установлен сертификат, и если я вручную набираю "https://" в адресной строке при доступе к сайту, появляется значок маленькой блокировки, но только вручную перейдите на сайт www.example-app.com в моем браузере, отправив трафик через http://.
Есть ли какая-то однострочная конфигурация или сложнее? Мне никогда не приходилось иметь дело с SSL раньше, поэтому извините меня, если я говорю, что не знаю, что происходит.
Я размещаю в MediaTemple в (gs), если это имеет значение, или у кого-либо есть опыт работы с такой настройкой.
Ответы
Ответ 1
Посмотрите ssl_requirement gem.
Он позволяет вам указывать в контроллерах, какие действия должны обслуживаться через https и какие действия можно обслуживать через https. Затем он позаботится о перенаправлении с http на https и наоборот.
Из документации:
class ApplicationController < ActiveRecord::Base
include SslRequirement
end
class AccountController < ApplicationController
ssl_required :signup, :payment
ssl_allowed :index
def signup
# Non-SSL access will be redirected to SSL
end
def payment
# Non-SSL access will be redirected to SSL
end
def index
# This action will work either with or without SSL
end
def other
# SSL access will be redirected to non-SSL
end
end
Ответ 2
Ruby on Rails - это инфраструктура приложения, а не веб-сервер. Конфигурация HTTPS, которую вы должны изменить, находится в конфигурации вашего веб-сервера (Apache, nginx и т.д.).
Ответ 3
Это довольно легко, и для этого вам не нужен драгоценный камень. Я писал, как перенаправить без www
в rails здесь. Перенаправление на https
является (почти) точно таким же.
class ApplicationController < ActionController::Base
before_filter :redirect_to_https
def redirect_to_https
redirect_to "https://example.com#{request.fullpath}" if !request.ssl? && request.host != "localhost"
end
end
Примените свой before_filter на все, что вы хотите, чтобы убедиться, что оно находится за защитой SSL. Я обычно один для повторного использования кода и драгоценных камней, но это смехотворно просто. Подробнее о request.protocol. (Обратите внимание, что в среде Ruby 1.9.3/Rails 3.2 имя request.fullpath
; в некоторых более ранних версиях оно было request.request_uri
, см. Примечания к выпуску и т.д.).
Ответ 4
https://github.com/bartt/ssl_requirement - это более новая версия ssl_requirement
.