2019年11月23日
Tweet
加齢によるものなのか、以前に比べて能力が落ちたと感じることが増えてきました。
それは、例えば息切れのような直接的なものでは無く、なんとなく30分ぐらいで目処がたつと見積もっていたことが、1時間経過してもまったく解決に近づくどころか、原因さえつかめないような時がちらほらと出てきたのです。
今回もそんな感じでした。
ロードバランサを利用している環境があります。
サーバーの設定を行っているときに、LBのメンバーからはずしたり、また追加したりしながらメンテナンスを行っていました。
今回はApacheで利用するSSL証明書の更新でした。
単体でテストを行ったときには全く問題がなく、そのままLB配下にしたのです。すると突然エラーになってしまいました。
Chromeなどで表示されるエラー内容としては、サーバーが無効な値を返したとかそんなでした。
Firefoxでは SSL received a record that exceeded the maximum permissible length. というエラーに。
単体で表示させるときには問題が無いことから、絶対にロードバランサーとの兼ね合いだと思っていたのです。
しかしデバッグをしようにも、サーバーは正常に動作しているように見えましたし、事実正常でした。どのログを見ても正しく動作しているのです。
しかし Apache の SSL にはごくわずかなアクセスしかなく、ログがほとんどとれていませんでした。
気にはなっていましたが、ロードバランサが不調で、正しくパケットを転送できてないのだと思っていたのです。
原因は非常に単純で、そしてだからこそ、その設定ミスをした私自身の責任が大きいように思いました。
LBの設定では、LBに対してのアクセスをローカルのサーバーにどのように振り分けるか設定をすることが可能です。
例えば LB のグローバルIP X.X.X.X のポート 80 へのアクセスに対しては、ローカルの 192.168.0.1 サーバーの 80に転送するといった感じです。別にこれは、192.168.0.1:8080 に転送することも可能です。この場合にはリバースプロキシのように振る舞うのでしょう。
さて、SSLなので443ポートです。グローバルIP X.X.X.X のポート 443 へのアクセスは、192.168.0.1:443 とすれば何の問題もありませんでした。
しかしたくさんのサーバーをメンテナンスしていたため、この設定をなんと 192.168.0.1:80 としてしまったのです。443ポートにアクセスがあったのを、わざわざローカルの80に転送してしまいました。LBやローカルのサーバーでそのように振る舞う設定が入っていればいいのでしょうが、今回は443へのアクセスは、ローカルへも443で転送してほしかったのです。
80に転送されてしまうことで、クライアントは443でアクセスしても、ただしい振る舞いがサーバーで行われずにエラーとなっていたようです。
結局最後まで正攻法では気づくことができず、設定値を見直しているときに気づきました。それもまた情けない話です。
パケットをキャプチャすればすぐだったのでしょうか・・。
それは、例えば息切れのような直接的なものでは無く、なんとなく30分ぐらいで目処がたつと見積もっていたことが、1時間経過してもまったく解決に近づくどころか、原因さえつかめないような時がちらほらと出てきたのです。
今回もそんな感じでした。
ロードバランサを利用している環境があります。
サーバーの設定を行っているときに、LBのメンバーからはずしたり、また追加したりしながらメンテナンスを行っていました。
今回はApacheで利用するSSL証明書の更新でした。
単体でテストを行ったときには全く問題がなく、そのままLB配下にしたのです。すると突然エラーになってしまいました。
Chromeなどで表示されるエラー内容としては、サーバーが無効な値を返したとかそんなでした。
Firefoxでは SSL received a record that exceeded the maximum permissible length. というエラーに。
単体で表示させるときには問題が無いことから、絶対にロードバランサーとの兼ね合いだと思っていたのです。
しかしデバッグをしようにも、サーバーは正常に動作しているように見えましたし、事実正常でした。どのログを見ても正しく動作しているのです。
しかし Apache の SSL にはごくわずかなアクセスしかなく、ログがほとんどとれていませんでした。
気にはなっていましたが、ロードバランサが不調で、正しくパケットを転送できてないのだと思っていたのです。
原因は非常に単純で、そしてだからこそ、その設定ミスをした私自身の責任が大きいように思いました。
LBの設定では、LBに対してのアクセスをローカルのサーバーにどのように振り分けるか設定をすることが可能です。
例えば LB のグローバルIP X.X.X.X のポート 80 へのアクセスに対しては、ローカルの 192.168.0.1 サーバーの 80に転送するといった感じです。別にこれは、192.168.0.1:8080 に転送することも可能です。この場合にはリバースプロキシのように振る舞うのでしょう。
さて、SSLなので443ポートです。グローバルIP X.X.X.X のポート 443 へのアクセスは、192.168.0.1:443 とすれば何の問題もありませんでした。
しかしたくさんのサーバーをメンテナンスしていたため、この設定をなんと 192.168.0.1:80 としてしまったのです。443ポートにアクセスがあったのを、わざわざローカルの80に転送してしまいました。LBやローカルのサーバーでそのように振る舞う設定が入っていればいいのでしょうが、今回は443へのアクセスは、ローカルへも443で転送してほしかったのです。
80に転送されてしまうことで、クライアントは443でアクセスしても、ただしい振る舞いがサーバーで行われずにエラーとなっていたようです。
結局最後まで正攻法では気づくことができず、設定値を見直しているときに気づきました。それもまた情けない話です。
パケットをキャプチャすればすぐだったのでしょうか・・。
stock_value at 07:46│Comments(0)