网站 "Down for maintenance" 最佳做法
Website "Down for maintenance" best practice
我有一个面向 public 的网站(银行相关),该网站将在接下来的几周内进行 PROD 更新。我需要在中断期间显示一个 "Down for maintenance" 页面 window.Because 银行给我提供了页面的具体要求,需要与网站本身的样式完全相同,我认为 app_offline.htm 解决方案对我有用,因为我无法访问我的样式表和图像,因为 IIS 将所有请求重定向到此页面。
我想知道什么是最好的解决方案设计,以便我可以在我的维护页面上使用我网站中的样式和图像?有人告诉我这样做的一个好方法是创建一个新网站,包括样式和图像,并将其作为单独的网站部署在 IIS< 然后在中断期间 window 我切换 IP 地址绑定IIS 指向我的维护站点。维护完成后,我将其切换回指向主网站。这是解决问题的好方法吗?
更新:
我实现了以下,它似乎工作得很好。当我将 Outage.htm 或 Maintenance.htm 文件放入我的网络根文件夹时,它会相应地重定向。停机和定期维护具有不同的样式和内容,因此我不得不创建 2 个页面。此外,当处于中断或维护模式时,并且请求来自本地主机,则不要重定向,以允许在阻止外部请求的同时进行维护后测试网站。
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CheckForDownPage());
}
}
public sealed class CheckForDownPage : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string ipAddress = HttpContext.Current.Request.UserHostAddress;
var outagePage = System.Web.Hosting.HostingEnvironment.MapPath("~/Outage.htm");
var maintenancePage = System.Web.Hosting.HostingEnvironment.MapPath("~/Maintenance.htm");
var isOutage = System.IO.File.Exists(outagePage);
var isMaintenance = System.IO.File.Exists(maintenancePage);
if ( (isOutage || isMaintenance) && ipAddress != "::1")
{
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable;
filterContext.HttpContext.Response.StatusDescription = "Service Unavailable.";
filterContext.HttpContext.Response.WriteFile(isOutage ? outagePage : maintenancePage);
filterContext.HttpContext.Response.End();
return;
}
base.OnActionExecuting(filterContext);
}
}
我实现了以下,它似乎工作得很好。当我将 Outage.htm 或 Maintenance.htm 文件放入我的网络根文件夹时,它会相应地重定向。停机和定期维护具有不同的样式和内容,因此我不得不创建 2 个页面。此外,当处于中断或维护模式时,并且请求来自本地主机,则不要重定向,以允许在阻止外部请求的同时进行维护后测试网站。
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CheckForDownPage());
}
}
public sealed class CheckForDownPage : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string ipAddress = HttpContext.Current.Request.UserHostAddress;
var outagePage = System.Web.Hosting.HostingEnvironment.MapPath("~/Outage.htm");
var maintenancePage = System.Web.Hosting.HostingEnvironment.MapPath("~/Maintenance.htm");
var isOutage = System.IO.File.Exists(outagePage);
var isMaintenance = System.IO.File.Exists(maintenancePage);
if ( (isOutage || isMaintenance) && ipAddress != "::1")
{
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable;
filterContext.HttpContext.Response.StatusDescription = "Service Unavailable.";
filterContext.HttpContext.Response.WriteFile(isOutage ? outagePage : maintenancePage);
filterContext.HttpContext.Response.End();
return;
}
base.OnActionExecuting(filterContext);
}
}
我有一个面向 public 的网站(银行相关),该网站将在接下来的几周内进行 PROD 更新。我需要在中断期间显示一个 "Down for maintenance" 页面 window.Because 银行给我提供了页面的具体要求,需要与网站本身的样式完全相同,我认为 app_offline.htm 解决方案对我有用,因为我无法访问我的样式表和图像,因为 IIS 将所有请求重定向到此页面。
我想知道什么是最好的解决方案设计,以便我可以在我的维护页面上使用我网站中的样式和图像?有人告诉我这样做的一个好方法是创建一个新网站,包括样式和图像,并将其作为单独的网站部署在 IIS< 然后在中断期间 window 我切换 IP 地址绑定IIS 指向我的维护站点。维护完成后,我将其切换回指向主网站。这是解决问题的好方法吗?
更新:
我实现了以下,它似乎工作得很好。当我将 Outage.htm 或 Maintenance.htm 文件放入我的网络根文件夹时,它会相应地重定向。停机和定期维护具有不同的样式和内容,因此我不得不创建 2 个页面。此外,当处于中断或维护模式时,并且请求来自本地主机,则不要重定向,以允许在阻止外部请求的同时进行维护后测试网站。
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CheckForDownPage());
}
}
public sealed class CheckForDownPage : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string ipAddress = HttpContext.Current.Request.UserHostAddress;
var outagePage = System.Web.Hosting.HostingEnvironment.MapPath("~/Outage.htm");
var maintenancePage = System.Web.Hosting.HostingEnvironment.MapPath("~/Maintenance.htm");
var isOutage = System.IO.File.Exists(outagePage);
var isMaintenance = System.IO.File.Exists(maintenancePage);
if ( (isOutage || isMaintenance) && ipAddress != "::1")
{
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable;
filterContext.HttpContext.Response.StatusDescription = "Service Unavailable.";
filterContext.HttpContext.Response.WriteFile(isOutage ? outagePage : maintenancePage);
filterContext.HttpContext.Response.End();
return;
}
base.OnActionExecuting(filterContext);
}
}
我实现了以下,它似乎工作得很好。当我将 Outage.htm 或 Maintenance.htm 文件放入我的网络根文件夹时,它会相应地重定向。停机和定期维护具有不同的样式和内容,因此我不得不创建 2 个页面。此外,当处于中断或维护模式时,并且请求来自本地主机,则不要重定向,以允许在阻止外部请求的同时进行维护后测试网站。
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CheckForDownPage());
}
}
public sealed class CheckForDownPage : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string ipAddress = HttpContext.Current.Request.UserHostAddress;
var outagePage = System.Web.Hosting.HostingEnvironment.MapPath("~/Outage.htm");
var maintenancePage = System.Web.Hosting.HostingEnvironment.MapPath("~/Maintenance.htm");
var isOutage = System.IO.File.Exists(outagePage);
var isMaintenance = System.IO.File.Exists(maintenancePage);
if ( (isOutage || isMaintenance) && ipAddress != "::1")
{
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable;
filterContext.HttpContext.Response.StatusDescription = "Service Unavailable.";
filterContext.HttpContext.Response.WriteFile(isOutage ? outagePage : maintenancePage);
filterContext.HttpContext.Response.End();
return;
}
base.OnActionExecuting(filterContext);
}
}