[CakePHP4.x]SSL付きだとDebugKitが動かない?

スポンサーリンク

CakePHP4でDebugKitが動かない問題に当たりました。

PHP7.4
CakePHP4.2.3
DebugKit  4.4?(Cake本体に同梱)

ホスト環境はWindows10で、VirtualBoxにCentOS8を入れて開発用のWebサーバーとし、ホストのhostsファイルでドメインを書いてアクセスできるようにしています。

やったこと

まず、DebugKit自体は初期状態でロードされていました。(Welcomeページで確認)

DebugKitの仕様でlocalhost以外の環境で動かしている場合は強制的に非表示になるようで、追加の設定が必要です。
ログを取っておくのを忘れましたが、ログにもこの件に関するメッセージが出ます。

この件の回避方法についてはCakeBookに書いてありますし、いろいろなブログで触れられています。

seafeTldでトップレベルドメインを指定する方法と、forceEnableで強制表示させる方法がありますが、結論としてはどちらも効果がありませんでした。
※とりあえず、今回はhoge.test というドメインにしてあります。トップドメインが.testの場合はデバッグが有効になるはずです。

で、いろいろ調べているうちに、ふとブラウザのデバッガを見てみたらこんなエラーが出てました。

toolbar.js?1612417269:54 Mixed Content: The page at ‘https://hoge.test/’ was loaded over HTTPS, but requested an insecure frame ‘http://hoge.test/debug-kit/toolbar/c7559c10-61f6-4f3c-948c-08ceb3d25d02’. This request has been blocked; the content must be served over HTTPS.

ん?コンテンツ自体はHTTPSでつないでるのに、DebugkitはHTTPで接続しようとしている?だからブラウザがブロックしたよということらしい。というか、今回はそもそもHTTPは設定してないからそりゃつながらんわ。

ということで、HTTPもつながるように設定してHTTPで接続したらちゃんとデバッガが起動しました。

何で誰も直さないんだろうなぁとおもってGitHubを見てみたらありました。

正確な意味はちょっと分からないのですが、

ローカルだったらSSLいらないだろ、俺は困ってないから直さないよ

というような内容だと思います。
本番環境に近づけるいみでSSL付きで開発するのって普通だと思うんですが、Cake開発している人にはそれは非常識なのかな?

回避方法

回避方法として、一つはHTTPSをやめてHTTPで接続して開発すること。

もう一つはapp_local.phpあたりでApp.fullBaseUrlでHTTPS付きでドメインを設定すること
こんな感じに

'App' => ['fullBaseUrl' => 'https://example.com']

これで、すべてのURLが強制的にここで設定したドメインにつながるようになるのでHTTPSでもちゃんと表示されるようになりました。

もちろん、CakeBookで触れられている通り強制的にデバッガを表示する設定は必須です。

PHPフレームワーク CakePHP 3入門 | 津耶乃, 掌田 |本 | 通販 | Amazon
Amazonで津耶乃, 掌田のPHPフレームワーク CakePHP 3入門。アマゾンならポイント還元本が多数。津耶乃, 掌田作品ほか、お急ぎ便対象商品は当日お届けも可能。またPHPフレームワーク CakePHP 3入門もアマゾン配送商品なら通常配送無料。

どうも最近のCakeは迷走しているように見える。フェールセーフなのは確かだと思うけど、過剰にしすぎて設定項目が増えすぎて余計な設定をしなければならず、かえって危険になるような気がします。

こんなばかばかしい内容で時間をつぶすのは本当になしにしてほしい。
昔はもっと使いやすかったんだけどなぁ…。

PHPエンジニアにおくるCakePHP3予習入門: バージョン 3.8 対応 | 辛島信芳 | 一般・入門書 | Kindleストア | Amazon
Amazonで辛島信芳のPHPエンジニアにおくるCakePHP3予習入門: バージョン 3.8 対応。アマゾンならポイント還元本が多数。一度購入いただいた電子書籍は、KindleおよびFire端末、スマートフォンやタブレットなど、様々な端末でもお楽しみいただけます。
タイトルとURLをコピーしました