皆様のWebサーバのネットワーク構成はどのようになっていますか? 仮想マシンを多用する現在、リバースプロキシ/ロードバランサを使用していない構成はそう多くは亡いのではないのでしょうか。 その場合、一番最初にリクエストを受けるリバースプロキシ/ロードバランサはHTTPSでリクエストを受け、バックエンドとの通信はHTTPという構成もそう珍しくはありません。
今回、Rancher Serverをセットアップしたネットワークの構成は下図の様になっていました。
ロードバランサ役のnginxがHTTPSでリクエストを受けます。 証明書はLet’s encryptを使用しており、ここでHTTPSを解きます。
ロードバランサは解いたリクエストをそのままリバースプロキシに投げます。リバースプロキシがリクエストURIに従い、さらにバックエンドサービスのサーバへとリクエストを送信します。
扨、Rancherの公式ドキュメント にを見ると、HTTPSで通信を行うセットアップの場合、nginx用設定のサンプルとして以下のような内容が示されています。
|
|
今回これを参考にnginxの設定を行った結果、ハマってしまいました。
ポイントは18行目、以下の部分です。
|
|
これはリバースプロキシを行う場合のリクエストヘッダの設定で、受けたリクエストのプロトコルをX-Forwarded-Protoに設定するという内容です。 えぇ、見たままですね。
今回の構成の場合、ロードバランサはHTTPSを、リバースプロキシはHTTPを設定します。 つまり、rancherがリクエストを受け取った時点で、X-Forwarded-ProtoはHTTPに設定されているわけです。
Rancher Serverは、X-Forwarded-Protoを見てリンクのプロトコルを決定している様で、この場合RancherのUIのリンクがすべてHTTPで作成されることとなります。 ユーザはHTTPSでアクセスをしていますから、ブラウザは混在アクティブコンテンツとしてブロック します。 これにより、RancherのUIは正常に動作しなくなり、最初に表示される画面とエラー画面以外に遷移できなくなります。
つまり、ホストの追加も、環境の追加も、もちろんカタログからアプリケーションの追加もできません。 何もできないのです。
これを避けるためには、リバースプロキシの設定で該当行を以下の様に設定します。
|
|
あくまで常時SSLの場合にのみ有効ですが、これでRancherのUIも正常に動作するようになります。