1

私たちの状況:

loabalancer(Astaro Security Gateway)の背後にいくつかのWebサーバーがあります。Webサーバーでは、asp.netアプリケーションを実行し、404および500ステータスコード用に構成されたcustomerrorpagesがあります。

これで、アプリケーションの開始に失敗すると、すべてのリクエストがステータスコード302を送信してエラーページにリダイレクトされ、エラーページ自体が500を送信します。

ロードバランサーは、15秒ごとにHEADリクエストをウェブサーバーに送信して、まだ生きているかどうかを確認し、生きている場合は、最初のhtmlステータスコードをチェックします。したがって、302のみが表示されます。500未満のすべてのコードは、サーバーが稼働しているものとして扱われます。

質問:

アプリケーションの起動に失敗した場合、どうすれば負荷分散を機能させることができますか?

編集:

アプリケーションの起動に失敗したということは、起動中にエラーが発生したことを意味します。一部の重要な部分を初期化できなかったため、すべてのページを実行できません。

4

1 に答える 1

1

いくつかの方法:

customErrorsモードのweb.configで、に設定しますredirectMode-ResponseRewriteこれにより、サーバーからエラーページへの302リダイレクトが削除されます-これは、使用者が要求した元のページが何であったかを簡単に確認でき、再試行できるという偶然の一致もあります問題が解決する可能性がある場合はF5。

ApplicationErrorイベントにフックしている場合は、代わりに使用するエラーページにリダイレクトするのではなく、必ず確認してくださいServer.Transfer

web.configsの1つに次のものがあります。

<customErrors mode="On"
              defaultRedirect="ErrorHandler.aspx"
              redirectMode="ResponseRewrite">

次に、ErrorHandlerページで、サーバーからの最後のエラーを確認し、それらを構成します。

  var serverError = Server.GetLastError();

  var error = serverError as HttpException;

  int errorCode;
  string errorMessage;

  if (null != error)
  {
    errorCode = error.GetHttpCode();

    errorMessage = error.GetHtmlErrorMessage();
  }
  else
  {
    errorCode = 404;
    errorMessage = "Page not found";
  }

  Response.StatusCode = errorCode;
  Response.StatusDescription = errorMessage;

明らかに、追加の処理を行うことをお勧めします。たとえば、これをすべて行う前に、元のリクエストをリダイレクトデータベースと比較して、移動されたコンテンツ/バニティURLを確認し、適切なものが見つからなかった場合にのみこれにフォールバックします。リダイレクト。

于 2010-06-22T11:19:53.167 に答える