syntax

2014年1月28日火曜日

nginxでソーリーページを返す(メンテ以外の場合)

nginxでソーリーページを返す(メンテ以外の場合)

以下の状況の場合はnginxでエラーハンドリングを行います。

  • リバースプロキシしてappsからの応答が一定以上ない場合のタイムアウト
  • アプリからのステータスコードが40x,50xの場合

nginxが40X,50Xのステータスコードでレスポンスを返すと、プラットフォーム側で用意しているエラー画面が表示される場合があります。
これを見た時プラットフォーム側のエラーなのか、こちらのサーバ側のエラーなのか判断つきません。
40x,50xのエラー時でもプラットフォームには200を伝えてこちらの用意したソーリーページを表示するようにします。

ステータスコードを書き換えたうえで事前に用意した専用のコンテンツを返すには下記のように設定します。
appsからのレスポンス待ちを5000msに設定しています。超えた場合は504となります。

server {
...
  proxy_read_timeout 5000ms;
  proxy_connect_timeout 5000ms;
  proxy_intercept_errors on;
  error_page 400 =200 /system/400.html;
  error_page 403 =200 /system/403.html;
  error_page 404 =200 /system/404.html;
  error_page 500 =200 /system/500.html;
  error_page 502 =200 /system/502.html;
  error_page 503 =200 /system/503.html;
  error_page 504 =200 /system/504.html;
...
}

書き換わったステータスコードがnginxのログにも出力されるので、アクセスログからエラー状況の調査ができなくなります。
対策としてログフォーマットに$upstream_statusを追加して、こちらのステータスコードでエラー状況を判断するようにします。

0 件のコメント:

コメントを投稿