web-dev-qa-db-ja.com

FirefoxとChromeはnginx / Passengerを使用してRailsアプリでHTTPSを強制し続けます

ここで本当に奇妙な問題が発生しました。Railsアプリを非SSLモードでChrome(v16)とFirefox(v7)で閲覧しようとするたびに)私のウェブサイトがHTTPSで提供されるように強制し続けます。

私のRailsアプリケーションは、Capistrano、nginx、Passenger、およびワイルドカードSSL証明書を使用してUbuntuVPSにデプロイされます。

Nginx.confのポート80に次のパラメーターを設定しました。

            passenger_set_cgi_param HTTP_X_FORWARDED_PROTO http;
            passenger_set_cgi_param HTTPS off;

私のnginx.confの長いバージョンはここで見つけることができます: https://Gist.github.com/2eab42666c609b015bff

Ssl-redirect.includeファイルには次のものが含まれています。

rewrite ^/sign_up https://$Host$request_uri? permanent ;
rewrite ^/login https://$Host$request_uri? permanent ;
rewrite ^/settings/password https://$Host$request_uri? permanent ;

非SSL要求から来る場合、これらの3つのページがHTTPSを使用することを確認することです。

私のproduction.rbファイルには次の行が含まれています:

  # Enable HTTP and HTTPS in parallel
  config.middleware.insert_before Rack::Lock, Rack::SSL, :exclude => proc { |env| env['HTTPS'] != 'on' }

Nginxの書き換えを介してHTTPにリダイレクトしようとしました、Ruby on Railsリダイレクトし、HTTPプロトコルを使用してURLを表示するRails 。

私のapplication.rbファイルには、before_filterフックで使用される次のメソッドが含まれています。

def force_http
 if Rails.env.production?
   if request.ssl?
     redirect_to :protocol => 'http', :status => :moved_permanently
   end
 end
end

私がHTTP非SSLにリダイレクトしようとするたびに、ブラウザはそれをHTTPSにリダイレクトしようとし、無限のリダイレクトループを引き起こします。ただし、Safariは問題なく動作します。 nginxでSSLの提供を無効にしても、ブラウザーはHTTPSを使用してサイトに接続しようとします。また、アプリをHerokuにプッシュすると、Railsリダイレクトはすべてのブラウザーで問題なく機能することにも言及する必要があります。

非SSLを使用する理由は、ホームページに非セキュアの動的埋め込みオブジェクトと非セキュアCDNが含まれており、セキュリティ警告を防ぎたいためです。

ブラウザがHTTPSリクエストを強制し続ける原因がわかりません。

7
Steve

環境構成でconfig.force_ssl = trueを使用し、後でそれをオフにした場合でも、ブラウザーはssl経由でのみ接続を確立する可能性があります。

Railsはforce_sslがtrueの場合に HSTSヘッダー を送信します。これにより、一部のブラウザは、アドレスバーに何が入力されているかに関係なく、HTTPS経由で問題のドメインへの接続のみを許可します。この設定は、デフォルトで1年間ブラウザによってキャッシュされます。

このブログ投稿ocmmentでこれを回避する方法のヒントをいくつか参照してください: http://www.simonecarletti.com/blog/2011/05/configuring-Rails-3-https-ssl/#comment-40447 ==

9
brookr

Wordpressすべての場所のサポートフォーラム: https://wordpress.org/support/topic/want-to-)の回答からHSTSをオフにする方法を見つけましたターンオフ-http-strict-transport-security-hsts-header#post-6068192

HSTSキャッシュをオフにするヘッダーを送り返すことができます。 Chrome、この例ではbefore_filter in a Rails 4 app:

response.headers['Strict-Transport-Security'] = 'max-age=0; includeSubDomains'
5
Ryan Angilly