CakePHP3で開発をしていて、Syntax Errorが出ると、nginxが500を返そうとして、404を出すという謎症状が発生しました。
通常、CakePHP3のDebugモードしておいてPHPの構文などが間違っているとエラーが出てエラー画面になるです。赤い画面のエラー画面ですね
これが出力されずに、
nginxが500エラー
webrootの50x.htmlを表示しようとする
無いから404NotFound
という謎な症状を発していました。どこにもエラーが出力されないし、よくわからなかったのです
原因
こちらですが、CentOS8のphp-fpmとNginxをインストールすると以下の共通ファイルにPHP実行の設定が書かれるようになりました。こいつの設定のせいで、エラーが握りつぶされてしまっていたようです。
/etc/nginx/default.d/php.conf
対象のファイルの設定は一旦消して、virtual hostの設定の中にPHPのいつものチューニングした設定を書くといつもの感じになりました。
内容を見てみる
今までは色々書かないとPHPがNGINXで動かなかったのを、インストールしたら勝手に動きますよ。という設定ですね。今回のPHPのエラーが吸い込まれる設定は以下のfastcgi_intercept_errors on;というのが悪さをしていたみたいです。こいつをOFFにすれば、一旦CakePHPのエラーが確認できるようになります。
index index.php index.html index.htm;
location ~ \.(php|phar)(/.*)?$ {
fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
fastcgi_intercept_errors on;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-fpm;
}
フレームワーク利用していると、フレームワーク側のエラーが表示されずに、躓いたりするところかもしれないですね。
参考になればと思います。