E ' meglio attenersi a ciò che è il protocollo attuale.
Se l'ambiente di produzione include apache o nginx per le risorse statiche e ssl, assicurarsi che l'intestazione https X-FORWARDED_PROTO sia inviata al worker quando la query del client si trova sulla porta https.
In questo modo i lavoratori saranno ware che ssl viene gestito esternamente e possono generare collegamenti con il protocollo corretto.
so che sarebbe meglio su serverfault che qui, ma qui è un file di configurazione esempio nginx che costringe https e imposta le intestazioni corrette per la gestione della SSL in lavoratori unicorno:
upstream WEBAPP_NAME {
server unix:/path/to/webapp/tmp/sockets/unicorn.sock fail_timeout=0;
}
server {
listen 4343;
server_name example.com;
root /path/to/webapp/public;
access_log /path/to/logs/nginx-access.log;
error_log /path/to/logs/nginx-error.log;
rewrite_log on;
ssl on;
# redirect when http request is done on https port
error_page 497 https://example.com:4343$request_uri;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location ~ ^/assets/ {
expires 1y;
add_header Cache-Control public;
add_header ETag "";
break;
}
location/{
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-FORWARDED_PROTO https;
proxy_pass http://WEBAPP_NAME;
proxy_redirect default;
}
}
In generale, utilizzando Rails.env.production? è la strada da percorrere. Potrebbe anche essere usato in un before_filter che reindirizza a https, ma funziona altrettanto bene. –
Grazie. Per qualche ragione, il fatto che routes.rb sia solo un normale vecchio file di Ruby non mi colpisce mai. È grandioso –
Sto solo indovinando qui, ma non "Rails.env.development?" Essere "più sicuro"? Vorrei che la mia produzione fosse il default, lo sviluppo l'eccezione. – Mosselman