nginxでerror_pageが動かない!となった時の対処法

20150221-nginx.jpg

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が有効に。

ググっても日本語のページでは全然ヒットしなかったので時間かかりました∠( ゚д゚)/

大阪の江坂でウェブ制作をしている、インフラもシステムもデザインもディレクションもできるエンジニア。 広く浅く薄っぺらくですが(笑)

Leave a reply:

Your email address will not be published.