nginxで運営しているサイトでエラーページをカスタマイズする必要が出てきたんです。
ググってみると「error_page 404 /40x.html」って感じで設定すればすぐ反映されまっせ、という記事は結構見かけます。
ですが、いかんせん設定してもerror_pageが全く効かなかったんですよ。
configtestでエラーが出るわけでもなく。
もうね、error_page syntax in nginx isn’t working! ですよ。
んで、どうしたものかと2時間くらいググったり試行錯誤した結果、原因と対処法判明。
今回のサイトでは、拡張子が.htmlの場合でもphpが動作するように設定していたので、
location ~\.(php|html)$ {
fastcgi_**** 〜〜
fastcgi_**** 〜〜
fastcgi_**** 〜〜
〜
}
という風に記述しており、アクセスを全部FastCGIに渡していたわけですが、そこに原因があった模様。
つまり、404エラーの処理もnginxでは無くてFastCGI側で処理されるようになってたわけですね。
そこで、
location ~\.(php|html)$ {
〜
fastcgi_intercept_errors on;
}
という風に“fastcgi_intercept_errors”をonにしてやると解決しました。
無事error_pageが有効に。
ググっても日本語のページでは全然ヒットしなかったので時間かかりました∠( ゚д゚)/