如何处理服务器升级

我有几个网站存储在服务器上。

如果我想升级我的apacheconfiguration,我想告诉我所有的客户在30分钟内会有升级。

我可以修改每个网站来显示这个消息,但我想知道,我怎么能使它自动? 什么是专业的方式来做到这一点?

另外,当Apache重新启动或升级时,将不会有“维护页面”。 如果apache出现故障,我怎么能为每个网站显示一个默认页面“正在升级”? 我需要2台服务器吗?

在你升级所有软件包的阶段,你只要保持Apache运行,没有人会注意到。

apache的实际重启可以通过一种方式来完成,即单个用户不会注意到,通过使用正常的重启。 这将允许每个工作线程完成当前页面的服务,然后不接受新的请求。 然后服务器重新加载,只需要几秒钟,然后再次开始服务请求。

这不是你的问题。 问题是如果出现问题,该怎么办。 其中apache将不会重新启动,并且你的用户注意到。 所以你要确保没有什么可以出错的。

要做到这一点的方法是在另一台机器上创build该Web服务器的精确镜像副本,然后在那里进行升级,看看会发生什么。 在apache重新启动之前记下所有需要手动修复或干预的事情。 然后重复整个过程,直到完全平稳的操作。 然后,只有你在现场服务器上进行升级。

我想告诉我所有的客户在30分钟内会有升级。

您只需要提供静态内容的一些额外的function – 您可以使用服务器端包含或PHP自动预先做到这一点,或使用您开发您的网站的语言滚动自己的解决scheme。然后,只需更改您所包含的文件的内容。 然而,这不是一个简单的练习 – 为了支持这个,你需要确保所提供的html内容是不可caching的(或者caching时间非常短)。 另外,如果你使用PHP路由,你不能直接写输出到浏览器,如果你需要使用cookies /会话/redirect。

当Apache重新启动或升级时,将不会有“维护页面”。 如果apache出现故障,我怎么能为每个网站显示一个默认页面“正在升级”?

这要复杂得多。 鉴于重启你的Apache实例不应该花费更多的时间,这是不值得的。 如果重新启动需要超过5秒钟,那么你有一个不同的问题来解决。

有很多方法可以做到这一点,但我可能会build议使用Javascript做到这一点。

您可以随时在每个网站上embedded脚本。 让脚本检查你的服务器上的一个URL,它可以简单地是一个0或1的文本文件,或者你可以在那里放置一个消息(JSON是一个很好的使用协议)。 让脚本,客户端,检查该variables的URL。 如果是1,显示消息,如果是0,则不显示。 您甚至可能希望在该文本文件中对邮件进行编码,以防您需要向所有网站用户显示有关延迟或其他信息的消息。

当您准备在30分钟前进行迁移时,请让Javascript在网站顶部启动通知栏,通知用户该网站即将升级。

你可以随心所欲地使用它,但是在我的脑海中,这是对许多网站来说最好的方法。 当然,如果你一次有很多的点击,那么很多客户端检查这个URL。 这取决于你的具体情况。 你也可以在服务器端做一些caching。

您可以使用mod_layout将自定义的HTML或PHP代码添加到页面的开头或结尾。 请参阅mod_layout FAQ ,了解如何使用mod的一个很好的概述,但它可以像使用一样简单:

<VirtualHost www.foo.com:80> LayoutFooter "Insert some sort of message here..." </VirtualHost>