Pound のエラーページのカスタマイズ
僕の所属している会社では、リバースプロキシに Poundを利用していて、こいつの 503 エラーを見かけるとよくこう表示されている。
The service is not available. Please try again later.
で、昔からお客さんによく「おいこれどうにかしろ」と言われていたのだけど、ものぐさなのとよくわからなかったのが合わさって、「カスタマイズできないんです!><」と答えていた(上長がだけど)。実際カスタマイズするならソースコード内にハードコーディングかなー、と思ってたのだけど、今日突発的にコード読んで自前の環境で動かしてたら、以下の記述でいけるっぽい事に気付いた。
User "pound" Group "pound" LogLevel 1 ListenHTTP Address 0.0.0.0 Port 80 Err503 "/usr/local/etc/503.html" Service BackEnd Address 127.0.0.1 Port 8000 TimeOut 30 End End End
ListenHTTP の中で定義した「Err503」ってとこが目的の部分です。BackEnd で定義した Address に対して、HTTPのステータスコードを判断して、エラーハンドリングして出力する際には、以下の4パターンに分類しているっぽい。
- Err414 (HTTP 414)
- Err500 (HTTP 500)
- Err501 (HTTP 501)
- Err503 (HTTP 503)
振る舞いは Apache なんかと一緒で、静的なローカルのファイルを指定します。HTML 形式のドキュメントしか試してませんが、もしかしたら php とか使えるのかもね。まあ背後で動いてる HTTP サーバにエラーページの処理飛ばしているわけじゃないし、Pound に付属してる HTTP.c が解釈してんじゃねっかな。
これ以外、例えば HTTP404 なんかは、バックエンドの HTTP サーバの処理に従ってます。で、各ステータスの説明については、「man pound」でマニュアル呼び出して、「Err」で検索してください。もしうはソースコード内の pound.8 を見てもいいですね。
追記:2012/08/02
err414 500 501 503 で指定できるページだけど、これらは日本語を表示させたい場合、UTF-8 を解釈できない模様なので、shift-jis を使う必要があります。こんな感じで作ってね。
[root@localhost pound]# vi err503.html <html> <head> <title> HTTP status : 503 Not Implemented </title> <meta http-equiv="Content-Type" content="text/html; charset=shift-jis"> </head> <body> <h1>HTTP status : 503 Not Implemented</h1> <p> エラーだよ〜ん </p> </html> 保存するときは、vim なら「:w」の前に「:set fileencoding=shift_jis」を実行してね。