如何关闭 .NET 站点进行维护?

Posted

技术标签:

【中文标题】如何关闭 .NET 站点进行维护?【英文标题】:How do I take a .NET site down for maintenance? 【发布时间】:2011-02-01 20:45:35 【问题描述】:

我有一个 ASP.NET 网站,我将不得不删除它以进行一些重大的结构更新,我想知道我应该如何从客户端的角度来处理它。我听说过App_Offline.htm 文件或类似的东西,但我从来没有真正让它成功工作。有谁知道怎么做?

编辑

我的应用正在运行 ASP.NET 4.0,物有所值。

【问题讨论】:

【参考方案1】:

我没有弄乱 app_offline 的愚蠢(除其他原因外,您在执行维护时无法继续在内部看到该站点),而是在 IIS 中创建了一个额外的“停机维护”站点,该站点通常会停止。它具有与主站点相同的 IP、主机标头等,但只有一个 default.aspx、一个图像文件夹和一个样式表。该文件包含“此站点将停止维护,直到 xx:xx PM CST”消息。

当我准备好执行更新时,我会停止主站点并启动维护站点,然后它会处理它收到的任何请求,当然还会返回维护消息。

维护完成后,停止维护占位符站点,然后重新启动您的主站点。

如果您使用主机标头,则可以修改此方法,以便在维护站点处理外部请求时,该站点仍可通过 LAN/WAN 进行内部访问。一个简单的方法是在启动维护站点之前从主站点中删除 <*>.yourdomain.com 的主机头,并确保主站点具有可内部访问的附加主机头(例如,添加到本地主机文件中)。当您启动维护站点时,它将处理外部请求,而主站点将处理对仅限内部标头的请求。

或者(这看起来很复杂,但省去了添加和删除标题的麻烦),创建三个站点:

    主站点:配置为正常运行。 维护站点:与主站点具有相同的 IP、主机标头等,但仅包含默认的“停机维护”页面以及所需的任何图像、css 等。 内部测试站点:复制主站点的配置并指向相同的文件夹,但只有主机标头等用于不在公共 DNS 中的内部名称。

这样,您只需停止主站点并启动另外两个站点,以便将外部流量引导到“停机维护”站点,同时您仍然可以查看和调整主站点。这对于在部署期间往往会出现的最后几分钟的测试/错误修复很有帮助。

更新

如果您无权访问服务器或 IIS 管理器,您很可能无法使用其中的任何一个。假设您的访问权限仅限于您自己的文件夹,您的选择似乎是将app_offline.htm 部署到站点的根目录(ASP.NET 检查该文件名),或者只是将整个站点替换为“down for维护”应用程序。也许其他人会提出替代方案。

【讨论】:

这是一个很好的答案,但是如果您真的没有服务器访问权限(托管在共享服务器上)怎么办? @Jason Hmmm... 没想到。请参阅我的更新,但在这种情况下,您大多不走运。【参考方案2】:

IE 的诀窍是将特定的字节数推过网络,否则 IE 无论如何都会显示不那么友好的 404 错误。这里有更多细节:http://weblogs.asp.net/scottgu/archive/2006/04/09/442332.aspx

【讨论】:

【参考方案3】:

如果您有一个良好的发布前测试流程和仔细的发布程序,您可能不会失望太久。

在这种情况下,将名为 App_Offline.htm 的文件拖放到您的站点根目录中可以正常工作。 IIS 将用它替换您的站点,直到您将其删除。这是一种确保过渡时没有任何更新的轻松方式。

我的只有一个带有站点徽标的标题和一条消息,我们将停机进行长达 20 分钟的维护。就是这样。我花了大约五分钟来写 IIRC。

对于不到半小时的短时间急剧下降,我绝对会推荐这个。再长一点,您可能会看到一个重大的系统更改,需要采用 David Lively 的方法。

【讨论】:

以上是关于如何关闭 .NET 站点进行维护?的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess站点关闭以进行维护

重写“站点关闭”页面的规则

在asp.net核心中实现“维护模式”

获取维护消息并访问仅用于在 ASP.net 中进行测试

如何从wordpress站点停用维护模式

Wordpress:网站一部分的维护模式