6

https://support.cloud.engineyard.com/entries/21715452-use-elastic-load-balancing-with-engine-yard-cloudで Engine Yard のドキュメントに従いました

このセットアップを取得し、うまく機能しているように見えたので、サーバーではなく ELB で SSL Terminated を使用できるようになりました。理論的には、これにより、単一の環境で複数の SSL 証明書を使用できるようになります。

このセットアップは、ブラウザーと ELB ロード バランサー間のトラフィックは SSL ですが、ELB からアプリケーション サーバーへのトラフィックは暗号化解除されることを意味します。これにより、SSL を強制する Rails 3.2.8 アプリケーションで問題が発生しました。これは、復号化されたすべてのリクエストを同等の https にリダイレクトし、復号化されたリクエストをロード バランサーからアプリケーション サーバーに再度送信し、無限ループ状態を引き起こします。

アプリで SSL の強制を無効にする場合、各リクエストをテストして、それが SSL 接続からのものかどうかを確認する必要があります。SSL 接続からのものであれば応答でき、そうでなければリダイレクトできます。

このリリース ノート ( http://aws.amazon.com/releasenotes/7778622769836370 ) によると、トラフィックが https 接続から渡されるときに、ELB は「https」を含む X-Forwarded-Proto ヘッダーを渡します。

まず、Engine Yard のリクエストには「X-Forwarded-Proto」というヘッダーがありません。「HTTP_X-FORWARDED_PROTO」は存在しますが、トラフィックが SSL 経由で ELB に送信される場合でも、常に「http」が含まれます。

誰かがこれについての洞察や回避策のアイデアを提供できますか? これまでのところ、あまり運がなくてもEYサポートを試しました。

4

1 に答える 1

4

X-Forwarded-Port ヘッダーを確認できます。これは、リクエストが SSL 経由でロード バランサーに送信された場合は 443 です。それはHTTP_X_FORWARDED_PORTラック環境にあります。

回避策として、Engine Yard Rails アプリでこの変更された rack-ssl gemを使用します。

于 2012-12-06T19:59:32.733 に答える