切腹のイラスト

Webサーバーのエラーページを猫にする

{
  date: "",
}

これはイルカ人間 Advent Calendar 2020の11日目の記事です。

読んで字の如く、サーバーのエラーページを猫の写真にしちゃいます。

せっかくわざわざ自分のサーバーへアクセスしてもらったのに、なんの飾りっ気もない無愛想なページを突きつけるのは心苦しくありませんか。
今回は、そんなお悩みを解決しちゃおうと思います。

Nginxの場合

まずは、Nginxが名前解決を行えるようにしないといけません。 nginxの適当な設定ファイル(わからなければ/etc/nginx/nginx.conf)を開いて、適当な場所に以下の内容をコピペしましょう。

resolver 1.1.1.1 1.0.0.1;

このIPアドレスの意味を理解していて、もしお気に入りのキャッシュサーバーがある場合はそれに置き換えてもらっても構いません。

次に、/etc/nginx/error_cats.conf等の適当なファイルに、以下の内容をコピペしてください。

recursive_error_pages on;
error_page 300 301 302 303 304 305 307 400 401 402 403 404 405 406 408 409 410 411 412 413 414 415 416 417 418 420 422 423 424 425 426 429 431 444 450 451 500 501 502 503 506 507 508 509 599 /status-cats-error.html;
location /status-cats-error.html {
    proxy_pass https://http.cat/$status;
}

nginxはこういう全てのエラーのハンドリングのやり方が少々力技になりがちでつらい。ちなみに300未満のステータスはエラー(?)と見られないようです。

最後に、さっきresolverの項目を追加したファイルに、error_cats.conf(別のファイル名で保存したのなら、それ)を読み込ませます。

include /etc/nginx/error_cats.conf;

以上でNginxの設定は完了です。sudo systemctl reload nginxをするなりして、nginx本体を再起動しましょう。

Caddyの場合

Go言語製のお手軽クロスプラットフォームWebサーバー、Caddyをご存知ですか?
え?!?!ご存知でない?!?!?!?!
それは勿体ない……
個人利用のサーバーを構築するためだけに、いちいちcertbotの定期実行スクリプトを組んでLet’s encryptから証明書を引っ張って来ようとしたり、設定ファイルとエラーログを睨みながらphpを動かすのに苦心する時代はもう終わりなのかもしれません。
Caddyならそこらへんのめんどくさいことを自動でやってくれます。自動で。

さて、そんなCaddyの場合の設定は以下の通りです(v2前提です)。

まず、Caddyfileの先頭らへんに以下のスニペットをコピペしてください。

(err_cat) {
    handle_errors {
        rewrite * /{http.error.status_code}
        reverse_proxy https://http.cat {
            header_up Host http.cat
        }
    }
}

次に、Caddyfile中の目的のホスト名のディレクティブの部分に以下を追記します。

import err_cat

以上です。
nginxよかはよっぽどシンプルです。

まとめ

いかがでしたでか?
このようなちょっとした心遣いができるのとできないのとでは、大きな差があります。
ぜひ、皆さんも歓迎すべきサーバーへの訪問者に向けるエラーページに癒やし要素を追加しましょう!

(※ curl等、コマンドラインベースのクライアントでは画像ファイルが見えないので何のことかわからない可能性があります。ご注意を)