この記事を三行にまとめると
checkPmaAbsoluteUri()まるっとコメントアウト
犯人はヤス
たいした話ではないんですが、AWSのロードバランサーでSSLを有効な状態にしている時に、その中でphpMyAdminを使おうとするとちょっとだけおかしな動きをすることがあります。
実際にやってみると分かるんですが、SSLのURLでphpMyAdminを開いてログインすると非SSLの方にリダイレクトしてしまう。例えば「https://norm-nois.com/phpmyadmin」というURLでログインすると「https://norm-nois.com:80/phpmyadmin」というURLにリダイレクトします。通常、80番ポートは非SSLのポートなのでこれだと正常にアクセスできない。
おそらくALBの方はSSL(https)の設定になっているけどその先のターゲット(EC2)への接続が80(http)になっている場合、EC2側のサーバー変数にSSLが入ってこないので、phpMyAdminが「こいつはhttpの接続だな。よっしゃ、URLに80をつけたろ」みたいな判断をしているせいで起こる現象だと思われます。
こっちとしては別にhttpだろうがhttpsだろうがポート番号なんてつけてくれなくても良いので、もしこういう現象が発生するようであればこの処理を取っ払っちゃっても問題ないと思います。
phpMyAdminの中を見ると「libraries」というフォルダの中に「Config.class.php」というファイルが入っています。そのファイルを開くと1300行目あたりに「checkPmaAbsoluteUri()」というメソッドがあるのですが、その中にこんなコードがある。
これをまるっとコメントアウトしちゃえばphpMyAdminはポート番号をつけなくなります。
対処自体は簡単なんで特に荒ぶるようなこともないんですが、でも何でポート番号をつける仕様になってるんでしょうね? 何か理由があるのか、何かしらの仕様の名残なのか……あるいはヤスの仕業か。
実際にやってみると分かるんですが、SSLのURLでphpMyAdminを開いてログインすると非SSLの方にリダイレクトしてしまう。例えば「https://norm-nois.com/phpmyadmin」というURLでログインすると「https://norm-nois.com:80/phpmyadmin」というURLにリダイレクトします。通常、80番ポートは非SSLのポートなのでこれだと正常にアクセスできない。
おそらくALBの方はSSL(https)の設定になっているけどその先のターゲット(EC2)への接続が80(http)になっている場合、EC2側のサーバー変数にSSLが入ってこないので、phpMyAdminが「こいつはhttpの接続だな。よっしゃ、URLに80をつけたろ」みたいな判断をしているせいで起こる現象だと思われます。
こっちとしては別にhttpだろうがhttpsだろうがポート番号なんてつけてくれなくても良いので、もしこういう現象が発生するようであればこの処理を取っ払っちゃっても問題ないと思います。
phpMyAdminの中を見ると「libraries」というフォルダの中に「Config.class.php」というファイルが入っています。そのファイルを開くと1300行目あたりに「checkPmaAbsoluteUri()」というメソッドがあるのですが、その中にこんなコードがある。
//Config.class.php
if (! empty($url['port'])
&& (($url['scheme'] == 'http' && $url['port'] != 80)
|| ($url['scheme'] == 'https' && $url['port'] != 443))
) {
$pma_absolute_uri .= ':' . $url['port'];
}
これをまるっとコメントアウトしちゃえばphpMyAdminはポート番号をつけなくなります。
対処自体は簡単なんで特に荒ぶるようなこともないんですが、でも何でポート番号をつける仕様になってるんでしょうね? 何か理由があるのか、何かしらの仕様の名残なのか……あるいはヤスの仕業か。