使用nginx在rails中强制ssllogin用户

我的堆栈看起来像这个nginx – > thin – > rails。 在我的rails应用程序中,我在我的applicaton_controller.rb中:

if (!Rails.env.development?) before_filter :force_ssl end # Force logged in users to use SSL def force_ssl if current_user && request.protocol != "https://" redirect_to :protocol => "https://" end end 

问题是所有的请求看起来像http,因为nginx处理ssl并转发到瘦,并导致无限的redirect循环。 在这种情况下,为login用户设置ssl的正确方法是什么?

您可以使用proxy_set_header指令来设置自定义标头,告诉您的后端请求来自安全前端。

例:

 for 80: proxy_set_header X-SSL 0; for 443: proxy_set_header X-SSL 1; 

或全球

 proxy_set_header X-Forwarded-Proto $scheme; 

为什么不为所有用户使用https?

谷歌,Github,还有其他人已经开始这样做了。

你可以直接在你的nginx配置中做到这一点。

 server { listen 80; location / { rewrite ^(.*) https://$host$1 permanent; } 

这会将所有端口80的流量重定向到https和端口443。

然后只声明你的普通服务器端口443。

 server { listen 443; // whatever }