ルール名 : error_processing

機能 :
  • 応答エラー処理iRuleは、サーバのレスポンスがエラーであった場合に、規定の回数トラフィックの振り分けをリトライします。
  • 規定回数のリトライを超え、エラーを応答せざるを得ない場合でも任意のエラーメッセージで応答でき、エラーコードを隠ぺいできます。
ベネフィット :
  • サーバのレスポンスに含まれるHTTPステータスコードに基づいて障害を検知できます
    - 対応HTTPステータスコード: 400/403/404/413/415/5xx
  • 万一障害が発生しているサーバにトラフィックが振り分けられた場合でもエラーをクライアントに応答する状況を回避します。
  • サーバにエラーが発生した場合でも、エラーを応答する可能性を減らし、アプリケーションのアップタイムを向上できます。
  • レイヤ7のコンテンツチェックをしている場合は、アプリケーションモニタリングの頻度を下げ、BIG-IPの負荷軽減を図れます。
使い方 :
  • リトライの回数はデフォルトでは3回になっています。変更する場合はmax_l7_retriesに任意の回数を設定します。
  • mask_errorsが「1」の場合(デフォルト)、エラー応答時に任意のエラーメッセージを設定できます。
  • 対応したくないHTTPステータスコードがあれば、HTTP:statusのリストから任意のステータスコードを削除してください。

rule error_processing {

when RULE_INIT {

#Set the value below to the maximum number of retries you want LTM to attempt
 
set ::max_l7_retries 3

#If you want to use a last resort pool, set the name of the pool to use

set ::last_resort_pool last_resort

#If you want to mask 4xx and 5xx errors, set the flag below to 1

set ::mask_errors 1

#This is the generic error generated when mask errors flag is set
#This only gets used if even the last resort pool returns an 4xx or 5xx error
#Please change as requried (HTML tags and unicode OK)
set ::error_message "If you think this is due to a server error, please contact the system administrator."

}

when CLIENT_ACCEPTED {
  set l7_retries 0
}

when HTTP_REQUEST priority 300 {
  if { $l7_retries > $::max_l7_retries } {
     catch { pool $::last_resort_pool }       
  }
  set request [HTTP::request]
}
when HTTP_RESPONSE priority 700 {
     switch -glob [HTTP::status] {
       "400" -
       "403" -
       "404" -
       "413" -
       "414" -
       "5*" {
            if { $l7_retries > $::max_l7_retries }{
               if { $::mask_errors} {
                  HTTP::respond [HTTP::status] content "<H2>Error [HTTP::status] </H2>\n  $::error_message"
               } else { return }
            } else {
                   incr l7_retries
                   HTTP::retry $request
            }
            }
       default { return }
      }
}
}

※F5ネットワークスジャパンでは、サンプルコードについて検証を実施していますが、お客様の使用環境における動作を保証するものではありません。実際の使用にあたっては、必ず事前にテストを実施することを推奨します。