我需要以历史悠久的 SE_firendly 方式在我的一个站点停机进行维护时返回 503 状态代码。如果不调用外部脚本,我似乎无法弄清楚如何做到这一点,我宁愿避免这样做。
是否有一个 apache 指令可以让我返回任意 HTTP 状态代码,而无需求助于诸如调用设置状态标头的 php 脚本之类的黑客行为?
我需要以历史悠久的 SE_firendly 方式在我的一个站点停机进行维护时返回 503 状态代码。如果不调用外部脚本,我似乎无法弄清楚如何做到这一点,我宁愿避免这样做。
是否有一个 apache 指令可以让我返回任意 HTTP 状态代码,而无需求助于诸如调用设置状态标头的 php 脚本之类的黑客行为?
这会为每个请求提供一个静态保留页面以及 503 状态。
RedirectMatch 用于否定保留页面本身,否则会创建无限循环。
mod_header 用于设置 Retry-After 标头,以便您可以告诉 Google/其他机器人等,在此示例中您应该在 18000 秒(5 小时)后备份。您可以
sudo ap2enmod header
激活 mod_header(这是 Header 指令所必需的)。尝试
来自https://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirect:
附加说明:这将显示 503 错误的默认/配置 ErrorDocument。
为了使您的维护模式更加灵活,请在存在特殊文件时设置 503,ala:
注意:DOCUMENT_ROOT 的位置在 httpd 2.2 和 2.4 之间可能不同
这样,您需要做的就是“touch /path/to/docroot/.maintenance”,您的网站将立即开始返回 503。然后为了使这一切变得简单,创建一个自定义的格式良好的 html 错误页面并将其添加到正确的 apache 服务器的配置文件中:
如果您有多个 Web 服务器,则可以在共享文件系统上设置 .maintenance 的位置,或者获得更多奖励积分:
pdsh -w $web1_ip,$web2_ip,$web3_ip "sudo touch /path/to/docroot/.maintenance"
使维护模式文件为基础的优点是它在您的应用程序不支持的情况下工作,它快速简单,并且前端缓存代理更容易处理,因为您可以一举处理所有后端 503。
资料来源: