我在服务器上存储了几个网站。
如果我想升级我的 Apache 配置,我想通知所有客户 30 分钟后将进行升级。
我可以修改每个网站以显示此消息,但我想知道,如何才能使其自动显示?专业的方法是什么?
此外,当 Apache 重新启动或升级时,将不会出现“维护页面”。如果 Apache 已关闭,我该如何为每个网站显示默认页面“正在升级”?我需要 2 台服务器吗?
答案1
在升级所有软件包的阶段,您只需保持 apache 运行,没有人会注意到。
Apache 的实际重启可以通过一种方式完成,即使用优雅重启,这样单个用户也不会注意到这一点。这将允许每个工作线程完成当前页面的服务,然后不再接受新请求。然后服务器重新加载(只需几秒钟),并再次开始处理请求。
那不是你的问题。问题是如果发生什么事该怎么办做出错了。Apache 不会重新启动,然后你的用户将要注意。所以你要确保没有什么可以出错。
而实现这一目标的方法是,在另一台机器上创建该 Web 服务器的精确镜像副本,然后在那里进行升级,看看会发生什么。在重新启动 Apache 之前,记下所有需要手动修复或干预的事情。然后重复整个过程,直到操作完全顺利。然后,也只有这样,您才能在实时服务器上进行升级。
答案2
我想通知所有客户,30 分钟后将会升级。
除了提供静态内容之外,您还需要一些额外的功能 - 您可以使用服务器端包含或 PHP 自动添加来实现这一点,或者使用您开发网站所用的语言推出自己的解决方案。然后只需更改您包含的文件的内容即可。然而,这不是一个简单的练习 - 为了支持这一点,您需要确保提供的 html 内容不可缓存(或缓存时间非常短)。此外,如果您使用 PHP 路由,如果您需要使用 cookies/会话/重定向,您就不能直接将输出写入浏览器。
当 Apache 重新启动或升级时,将不会出现“维护页面”。如果 Apache 已关闭,我该如何为每个网站显示默认页面“升级中”?
这要复杂得多。考虑到重新启动 Apache 实例不应花费超过几秒钟的时间,因此不值得付出努力。如果重新启动花费的时间超过 5 秒,那么您就需要解决另一个问题。
答案3
有很多方法可以做到这一点,但我建议使用 Javascript 来实现。
您可以随时在每个网站上嵌入脚本。让脚本检查服务器上的 URL,它可以是一个带有 0 或 1 的文本文件,或者您可以在其中放置一条消息(JSON 是一种很好的协议)。让脚本(客户端)检查该变量的 URL。如果是 1,则显示消息,如果是 0,则不显示。您甚至可能希望对该文本文件中的消息进行编码,以防您需要向所有网站用户显示有关延迟或任何其他信息的消息。
当您准备好进行迁移时,提前 30 分钟让 Javascript 在网站顶部启动通知栏,通知用户该网站将很快升级。
你可以随心所欲地使用它,但在我看来,这是对许多网站来说最好的方法。当然,如果你在任何时候都有很多点击,那就意味着有很多客户端在检查该 URL。这取决于你的具体情况。你也可以在服务器端使用一些缓存来做到这一点。
答案4
您可以使用mod_layout将自定义 HTML 或 PHP 代码添加到页面开头或结尾。请参阅mod_layout 常见问题解答以获得关于如何使用该 mod 的良好概述,但它的使用方法非常简单:
<VirtualHost www.foo.com:80>
LayoutFooter "Insert some sort of message here..."
</VirtualHost>