nginxで50x, 40xのエラーページの設定を行う

nginxでエラーページの設定するときのメモ。特に40xとか50xとかまとめて設定する場合とIP制限などをかけつつカスタマイズしたエラーページ設定する場合。

基本的な設定

エラーページの設定部分のみ抽出すると以下のような書き方がスタンダードのようです。

error_page 500 502 503 504  /50x.html;
error_page 400 410 403      /40x.html;

location = /50x.html {
    root /var/www/project/error;
}

location = /40x.html {
    root /var/www/project/error;
    allow all;
}

location /error/ {
    root /var/www/project;
    allow all;
}

上記の設定に対応するディレクトリ構造はこんな感じにします。

var/www/project
      └ error
           ├ 40x.html
           ├ 50x.html
           └ resources
                ├ css
                ├ js
                └ images

ちなみにnginxでよく嵌るのが、上記のerrorディレクトリとlocation /error/の関係でしょうか。 locationの後ろにディレクトリ指定したら(この場合error)、同じ名前のディレクトリがrootで指定しているパスの直下に無いとだめですね(毎回忘れる・・)。

allow all について

先ほどの設定でallow allを付けていました。これはアクセス制限(IP制限等)をかけた場合の処置です。

例えば

allow xxx.xxx.xxx.xxx;
deny all;

のようにIP制限をかけた場合、該当するIP以外の人がアクセスした場合403が出ます。 しかしこの時にallow allがないとカスタマイズした403ページが出ず(アクセス制限しているので)、nginxのデフォルトの403が出てしまうのですね。

ですので、それが嫌だという人はallow allでもって、自身のカスタマイズした403ページを見せてあげる、という意図です。