1

サイトにSSLサポートを追加した後、無限のリダイレクトループが発生します。「SslRequirement」プラグインを使用しています。

私が見ている症状は、「ssl_required」が有効になっているアクションと、先頭にhttpsがある手動で入力したURLが無限ループに入り、development.logファイルに次のようなものが何度も繰り返されることです。ブラウザがリダイレクトループをキャッチしてページの読み込みを停止するまで(この例では「/ admins / index」がアクションですが、どのアクションでも発生します):

Processing AdminsController#index (for 127.0.0.1 at 2010-08-13 13:50:16) [GET]
  Parameters: {"action"=>"index", "controller"=>"admins"}
Redirected to https://localhost/admins
Filter chain halted as [:ensure_proper_protocol] rendered_or_redirected.
Completed in 0ms (DB: 0) | 302 Found [http://localhost/admins]

最初は、すべてのアクションを「ssl_allowed」にする必要があるという問題があると思ったので、それを試しましたが、役に立ちませんでした。

SslRequirementの使用を削除し、「ssl_required / ssl_allowed」参照を削除すると、httpsは正常に機能します。したがって、問題のように見えるのはhttpからhttpsへのアクションのリダイレクトです。

手がかりはありますか?

4

1 に答える 1

2

答えはここにあります:

http://www.hostingrails.com/SSL-Redirecting-not-working

短いバージョンは、nginx 構成の SSL vhost に次の行を追加したことです。

proxy_set_header X_FORWARDED_PROTO https;


詳細バージョンは次のとおりです。

基本的に、この問題は、ソース リクエストが HTTPS プロトコルであるという事実を Mongrel クラスタに渡さない nginx サーバーに起因していました。これにより、「request.ssl?」が呼び出されました。SslRequirement プラグイン内で常に false を返すようにします。

したがって、これが false として返された場合、「ensure_proper_protocol」は https 経由でアクションを再発行し、「request.ssl?」をチェックして「false」を返し、https 経由でアクションを再発行します。 「request.ssl?」をチェックすると、「false」が返され、https 経由でアクションが再発行されます。「request.ssl?」がチェックされ、「false」が返され、アクションが再発行されます。 https は「request.ssl?」をチェックし、「false」を返し、https 経由でアクションを再発行します ...

…お分かりですね。雑種クラスタは、リクエストが HTTPS プロトコルを介しているとは決して考えなかったので、永久にリダイレクトされました。これを修正するために nginx 設定を少し変更し、BAM-O: 問題を解決しました。

于 2010-08-13T20:17:53.710 に答える