1

我们的情况:

我们在 loabalancer(Astaro 安全网关)后面有几个网络服务器。在网络服务器上,我们运行一个 asp.net 应用程序,我们为 404 和 500 状态代码配置了自定义错误页面。

现在,当应用程序无法启动时,每个请求都会通过发送状态码 302 重定向到错误页面,然后错误页面本身会发送 500。

负载均衡器每 15 秒向我们的网络服务器发送一个 HEAD 请求,以查看它是否仍然存在,如果存在,它会检查第一个html 状态代码。所以它只看到 302。低于 500 的每个代码都被视为服务器已启动并正在运行。

问题:

如果应用程序无法启动,我们如何使负载均衡工作?

编辑:

应用程序无法启动是指在启动过程中出现错误。一些重要部分无法初始化,因此每个页面都无法执行。

4

1 回答 1

1

几种方法:

在您的 web.config 中 customErrors 模式设置redirectModeResponseRewrite- 这将删除从服务器到错误页面的 302 重定向 - 这也有一个令人高兴的巧合,使用可以轻松查看他们请求的原始页面是什么,并且可以重试F5 如果这可能会解决问题。

如果您要挂钩 ApplicationError 事件,请确保不要重定向到您使用的错误页面Server.Transfer

我的 web.config 之一中有以下内容:

<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 回答