网站“停机维护”最佳实践

Posted

技术标签:

【中文标题】网站“停机维护”最佳实践【英文标题】:Website "Down for maintenance" best practice 【发布时间】:2015-09-03 02:04:13 【问题描述】:

我有一个面向公众的网站(与银行相关),该网站将在接下来的几周内进行 PROD 更新。我需要在停电窗口期间显示一个“Down for maintenance”页面。由于银行已经为我提供了该页面的具体要求,需要与网站本身的样式完全相同,我不认为 app_offline.htm 解决方案对我有用,因为我无法访问我的样式表和图像,因为 IIS 将所有请求重定向到此页面。

我想知道,最好的解决方案设计是什么,以便我可以在维护页面上使用我网站中的样式和图像?有人告诉我这样做的一个好方法是创建一个新网站,包括样式和图像,并将其部署为 IIS

更新:

我实现了以下,它似乎工作得很好。当我将 Outage.htm 或 Maintenance.htm 文件放入我的 Web 根文件夹时,它会相应地重定向。停机和定期维护具有不同的样式和内容,因此我必须创建 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);
    

【问题讨论】:

您如何部署您的应用程序?您是否关心部署期间的当前会话状态/用户?您的部署需要多长时间?此外,您应该能够在 app_offline.htm 页面中加载 CSS。 我不关心会话等...网站的所有流量都会在离线之前被阻止。 【参考方案1】:

我实现了以下,它似乎工作得很好。当我将 Outage.htm 或 Maintenance.htm 文件放入我的 Web 根文件夹时,它会相应地重定向。停机和定期维护具有不同的样式和内容,因此我必须创建 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);
    

【讨论】:

嗨,当您发布新版本的 Web 应用程序时,这是否有效?这会自动发生吗?

以上是关于网站“停机维护”最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

使用 Node.js 构建网站的最佳实践

使用 Node.js 构建网站的最佳实践

SSL 安全网站最佳实践

markdown Drupal网站建设最佳实践

优化 LAMP 网站以提高速度的最佳实践? [关闭]

响应式网站设计 - 最佳实践