我们的情况:
我们在loabalancer(Astaro Security Gateway)背后有几个网络服务器。在网络服务器上,我们运行一个asp.net应用程序,我们为404和500状态代码配置了客户脚本。
现在,当应用程序无法启动时,每个请求都会通过发送状态代码302重定向到errorpage,并且errorpage本身会发送500.
loadbalancer每隔15秒向我们的网络服务器发送一个HEAD请求,看看它是否还活着,如果是,它会检查第一个 html状态代码。因此它只能看到302. 500以下的每个代码都被视为服务器启动并运行。
问题:
如果应用程序无法启动,我们如何才能使负载均衡工作?
修改
应用程序无法启动我的意思是在启动期间出现了错误。一些基本部分无法初始化,因此每个页面都无法执行。
答案 0 :(得分:1)
有两种方式:
在customErrors模式的web.config中,将redirectMode
设置为ResponseRewrite
- 这会将302重定向从服务器移除到错误页面 - 这也很有用,可以很容易地看到他们要求的原始页面是什么,如果可能解决问题,可以使用F5重试。
如果您要挂钩ApplicationError事件,请确保使用Server.Transfer
而不是重定向到您的错误页面。
我的一个web.configs中有以下内容:
<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;
显然你可能想要进行额外的处理 - 例如在我做这一切之前,我将原始请求与我的重定向数据库进行比较,以检查移动的内容/虚荣网址,如果我不能,则只回到此处找到合适的重定向。