2010-01-23 42 views
12

¿Qué debo hacer para que el tráfico de mi aplicación ruby ​​on rails use https? Tengo un certificado instalado y si escribo manualmente "https: //" en la barra de direcciones cuando accedo al sitio, aparece el pequeño icono de candado, pero el hecho de ir manualmente a www.example-app.com en mi navegador envía tráfico a través de http : //.SSL con Ruby on Rails

¿Hay alguna configuración de una línea o es más complicado que eso? Nunca antes tuve que lidiar con SSL, así que discúlpeme si parece que no sé lo que está pasando.

Estoy alojando en MediaTemple en un (gs), si eso importa o alguien tiene experiencia con dicha configuración.

Respuesta

14

Echa un vistazo a ssl_requirement gema.

Se le permite especificar en los controladores de las acciones que deben ser a través de HTTPS y qué acciones pueden ser a través de HTTPS. A continuación, se encargará de redireccionar de http a https y viceversa.

De la documentación:

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 
+0

@AustinFitzpatrick su enlace no tiene ninguna relación con SSL – lulalala

+0

sí, parece que la base de conocimientos ha cambiado, ¿no? Lo eliminaré. –

6

Ruby on Rails es un marco de aplicación y no un servidor web. La configuración HTTPS que necesita cambiar está en su configuración del servidor web (Apache, nginx, etc).

+0

De acuerdo, lo sabía. Supongo que tengo curiosidad sobre cómo cambiar esa configuración. ¿Dónde sería eso? Al menos es un líder de investigación. Examinaré los archivos de configuración de apache y mongrel. –

+0

no es necesario cambiar mestizo. Solo archivo de configuración de Apache. Creo que el archivo de configuración predeterminado contiene la configuración HTTPS, pero está deshabilitado por defecto. También busque usar el servidor web nginx (usa menos recursos, es más fácil de configurar). – Zepplock

3

Es bastante fácil, y no se necesita una joya para ello. Blogueé cómo redirigir sin www en los rieles here. Redirigir a https es (casi) exactamente lo mismo.

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 

Aplique su before_filter en cualquier cosa que quiera asegurarse de que se mantenga detrás de la seguridad SSL. Normalmente soy uno para la reutilización de código y las gemas, pero este es ridículamente simple. Leer más sobre request.protocol. (Tenga en cuenta que en el de Ruby 1.9.3/Rails 3.2 medio ambiente, el nombre es request.fullpath; en algunas versiones anteriores, era request.request_uri, ver las notas de la versión, etc.)

+0

¿Esto no causaría problemas en un entorno de desarrollo? ¿A menos que también abstraigas la parte de example.com? – jerhinesmith

+0

@jerhinesmith Edición, muestra de código fijo –

+0

¿Ha request.request_uri cambiado los nombres de los métodos? No está definido en mi entorno Ruby 1.9.3/Rails 3.2. –