Eu tenho um problema muito estranho aqui, onde toda vez que tento navegar no meu aplicativo Rails no modo não-SSL, o Chrome (v16) e o Firefox (v7) continuam forçando meu site a ser exibido em HTTPS.
O aplicativo My Rails é implantado em um Ubuntu VPS usando Capistrano, nginx, Passenger e um certificado SSL curinga.
Eu configurei esses parâmetros para a porta 80 no nginx.conf:
passenger_set_cgi_param HTTP_X_FORWARDED_PROTO http;
passenger_set_cgi_param HTTPS off;
A versão longa do meu nginx.conf pode ser encontrada aqui: link
O arquivo ssl-redirect.include contém:
rewrite ^/sign_up https://$host$request_uri? permanent ;
rewrite ^/login https://$host$request_uri? permanent ;
rewrite ^/settings/password https://$host$request_uri? permanent ;
É para garantir que essas três páginas usem HTTPS quando provenientes de solicitações não SSL.
Meu arquivo production.rb contém esta linha:
# Enable HTTP and HTTPS in parallel
config.middleware.insert_before Rack::Lock, Rack::SSL, :exclude => proc { |env| env['HTTPS'] != 'on' }
Eu tentei redirecionar para o HTTP via reescritas do nginx, redirecionamentos do Ruby on Rails e também usei o URL de visualização do Rails usando o protocolo HTTP.
Meu arquivo application.rb contém esses métodos usados em um gancho before_filter:
def force_http
if Rails.env.production?
if request.ssl?
redirect_to :protocol => 'http', :status => :moved_permanently
end
end
end
Sempre que tento redirecionar para HTTP não-SSL, o navegador tenta redirecioná-lo de volta para HTTPS, causando um loop de redirecionamento infinito. O Safari, no entanto, funciona muito bem. Mesmo quando desabilitei a exibição de SSL no nginx, os navegadores ainda tentam se conectar ao site usando HTTPS. Eu também devo mencionar que quando eu empurrei meu aplicativo para o Heroku, o redirecionamento do Rails funciona muito bem para todos os navegadores.
O motivo pelo qual desejo usar o não SSL é que minha página inicial contém objetos incorporados dinâmicos não seguros e um CDN não seguro, e quero evitar avisos de segurança.
Não sei o que está fazendo com que o navegador continue forçando solicitações HTTPS.