EC2インスタンスにnginxをyumからインストールして、80番ポートをプロキシとして待ち受けており、同ホストの別ポートに転送しています(こちらもnginxで待ち受け)。ちょっとオシャレなサイトなので、エラードキュメントはnginxのデフォルトじゃまずかろうということで、404と403のエラードキュメントを設定しようとしたのですが、何度やってもデフォルトのエラーページに飛ばされてしまう・・・
ちなみに、プロキシのconfigもバックエンド(http)のconfigも、 /etc/nginx/conf.d の中にあるのですが、ファイル名の接頭語に数字をつけてプロキシのほうが先に読み込まれるようにしています。
調べてみたところ、まず、デフォルトの /etc/nginx/nginx.conf がバグっている。。。
error_page 404 /404.html; location = /40x.html { root /usr/share/nginx/html; }
実際に /usr/share/nginx/html ディレクトリの中身を見てみると、40x.html ではなくて、 404.html がありました。(;´Д`) なので、デフォルトのconfigからわざわざ修正しないといけないですねこれ。
しかし、ステータスコード403と404でエラードキュメントを明確に分けたいので、デフォルトのエラードキュメント設定は使わずに、自分でファイルを指定してそれぞれ用意することにしました。
error_page 403 /403.html; location = /403.html { root /home/ec2-user/errorpages; }
error_page 404 /404.html; location = /404.html { root /home/ec2-user/errorpages; }
さぁ、これでnginxを再起動してみよう!と意気込むものの、やはりデフォルトのままだ。。。上記設定に間違いはない・・・なんでだ?としばらく悩み、403エラーのほうのエラードキュメントをプロキシのconfigに、404エラーのほうのエラードキュメントをバックエンドのconfigに書いてあげたところ、期待通りにオリジナルのエラーページを読みにいってくれるようになりました。
nginxパッケージに同梱の更新履歴 ( /usr/share/doc/nginx-1.2.9/CHANGES ) を見てみたら、プロキシやmemcachedを使っているときの404ページまわりでバグフィクスしたって書いてあるようだけど、まだ直りきってなさそう・・・わからんけど。とにもかくにも、こんなバッドノウハウで一応は直ったよってお話でした。ちゃんちゃん。
[amazonjs asin="4048702270" locale="JP" title="ハイパフォーマンスHTTPサーバ Nginx入門"]