# X-Forwarded-Proto
# サマリー
HAproxy の背後の keycloak の Administration Console を開こうとしてもLoading the admin console のスピンが永遠に回っていて終わらず、ブラウザのコンソールを見ると keycloak へのリクエストが Mixed Contents といわれてエラーになっている時
# 結論
haproxy の backend に X-Forwarded-Proto がないのが原因かもしれません
# 現象
haproxy の背後の keycloak を開いて
Administration Console を開こうとすると、Loading the admin console のスピンが永遠に回って終わらない。ブラウザの console を見ると Mixed Contents といわれてエラーになっている
# 原因
エラーメッセージが示している通り、keycloak へのリクエストが http://keycloak
と https ではなく http になってしまっている
# 解決策
haproxy.cfg の backend に以下のように X-Forwarded-Proto を追加して、haproxy から keycloak へのアクセスのプロトコルが https になるようにする
backend keycloak
http-request add-header X-Forwarded-Proto https if { ssl_fc }
server keycloak 127.0.0.1:8080
# ちなみになんでこうなってしまうのか
こちら にも書いた通り https は通信を始めるまえに 暗号化方式のネゴシエーション とか 鍵の交換(ようするにデフィー・ヘルマンとかのアルゴリズムで秘匿下に共に鍵を生成する)とかのオーバーヘッドが私の実測だと 3KByte ぐらいあって、動画配信みたいにギガバイト単位のセッションならともかく、個々のセッションで小さなデータがポンポンと飛んでくるようなアプリケーションにとっては結構大きなオーバーヘッドです
なのでムダを減らすため SSL は HAProxy で終端してしまって、(実装次第ですが普通は)安全と考えられる HAProxy の内側、昔の言葉でいうイントラ側は SSLなし で中継するのがデフォルトになっています、というか SSL を HAProxy で終端してもらえるのが他にも何かとありがたかったりします
が、keycloak みたいに https でなければ受け付けてくれない 頑固者 に中継しようとすると、しょうがないので HAProxy と keycloak 間もまた SSL で暗号化してあげないと他にどうしょうもないんですね
将来のバージョンでもしかしたらなにか設定が追加されるかもしれないし、もしかしたら私が気がついてないだけですでに何かあるのかもしれませんが
# できあがり
無事、Administration console をひらけました
# 感想
日本語だと頑固 って美徳の一種と考えられてるみたいですけど無駄に頑固な奴の存在ってはた迷惑で、本当は 柔軟性 こそが美徳なんだと思います、Be open-minded and flexible!
まあ、寿司とかラーメンとか外食しない私には関係ない話ではありますが
← haproxy