Ho un’applicazione Rails ospitata nella intranet aziendale, accessibile
in una directory ‘rails_app_dir’ (uno ‘scope’ dal punto di vista delle
regole di Routing):
Il livello SSL viene gestito a livello aziendale da un reverse proxy,
qundi le richieste che arrivano sia al web server (Nginx) che alla mia
app Rails sono già in http.
Il problema è che tutte le redirect_to (es. redirect_to book) vengono
passate (costruite) in http, generando un errore.
Forzando mediante:
config.force_ssl = true
non risolve il problema perché comunque a Rails, anche dopo un
redirezionamento la richiesta arriva ancora in http, e questo genera un
loop di redirezionamenti…
Il giorno 15/nov/2012, alle ore 14:00, Iwan B. [email protected] ha
scritto:
Forzando mediante:
config.force_ssl = true
non risolve il problema perch comunque a Rails, anche dopo un
redirezionamento la richiesta arriva ancora in http, e questo genera un
loop di redirezionamenti…
Qualche idea?
la prima che mi viene in mente di non usare i path helpers tipo
users_path, bens users_url. in questo modo le url generate dovrebbero
contenere il prefisso https
Quindi devi generare le URL in modo che usino HTTPS in uscita, ma devi
accettare HTTP in entrata. Ho capito bene?
Forse un problema che risolvi facendoti un middleware ad-hoc. E’ anche
facile da fare secondo me.
Tieni config.force_ssl = false e quando la URL esce gli cambi lo
scheme ad https://
Quindi devi generare le URL in modo che usino HTTPS in uscita, ma devi accettare
HTTP in entrata. Ho capito bene?
Esatto
Forse un problema che risolvi facendoti un middleware ad-hoc. E’ anche facile
da fare secondo me.
Tieni config.force_ssl = false e quando la URL esce gli cambi lo scheme ad
https://
Effettivamente non proprio banale, neanche trascendentale.
Il tuo problema sono URL dei redirect, visto che i path helpers stampano
un path quindi lo schema da usare in quel caso viene interpretato dal
browser.
Per i redirect, visto che si tratta di un header, puoi usare una cosa
del genere:
con @app.call(env) passi la chiamata in basso nello stack, ispezioni gli
header e se si tratta di un redirect cambi lo schema.
Uso frequentemente utilizzare rails dietro ad un proxy https non mi
ricordo di aver avuto molti problemi… Come reverse proxy uso
lighttpd ma non penso sia differente.
Per i link utilizzo _path in maniera che l’indirizzo sia riferito
all’url a cui e` connesso l’utente (indipendentemente che sia http o
https)
nel caso mi sia indispensabile utilizzare un url aggiungo :protocol =>
‘https’ al link