如何在不调用外部脚本的情况下在 Apache 中返回 503 状态

如何在不调用外部脚本的情况下在 Apache 中返回 503 状态

我需要在我的某个网站停机维护期间以传统的 SE_firendly 方式返回 503 状态代码。我似乎无法弄清楚如何在不调用外部脚本的情况下执行此操作,而我宁愿避免调用外部脚本。

是否存在一个 apache 指令,可以让我返回任意的 HTTP 状态代码,而无需诉诸诸如调用设置状态标头的 php 脚本之类的黑客手段?

答案1

这为每个请求提供一个静态保持页面以及 503 状态。

RedirectMatch 503 ^/(?!holding\.html)
ErrorDocument 503 /holding.html
Header always set Retry-After "18000"

RedirectMatch 用于否定持有页面本身,否则会造成无限循环。

mod_header 用于设置 Retry-After 标头,以便您可以告诉 Google/其他机器人等,您应该在本例中 18000 秒(5 小时)后备份。您可以sudo ap2enmod header激活 mod_header(这是 Header 指令所必需的)。

答案2

尝试

Redirect 503 /

https://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirect

可以通过将数字状态代码作为 status 的值来返回其他状态代码。如果状态介于 300 和 399 之间,则必须提供 URL 参数。如果状态不在 300 和 399 之间,则必须省略 URL 参数。

附加说明:这将显示 503 错误的默认/配置的 ErrorDocument。

答案3

为了使您的维护模式更加灵活,当存在特殊文件时设置 503,ala:

RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/.maintenance -f
RewriteRule .* - [R=503]

注意:httpd 2.2 和 2.4 中的 DOCUMENT_ROOT 位置可能有所不同

这样,您只需“触摸 /path/to/docroot/.maintenance”,您的站点就会立即开始返回 503。然后,为了让一切顺利,创建一个自定义的格式良好的 html 错误页面,并将其添加到正确的 apache 服务器的配置文件中:

ProxyErrorOverride on
ErrorDocument 503 /error/503.html

如果您有多个 Web 服务器,可以将 .maintenance 放在共享文件系统上,这样可以得到加分,或者可以得到更多的加分:

pdsh -w $web1_ip,$web2_ip,$web3_ip "sudo touch /path/to/docroot/.maintenance"

使维护模式基于文件的优点是,当您的应用程序不起作用时它可以工作,它快速而简单,并且前端缓存代理更容易处理,因为您可以一次性处理所有后端 503。

资料来源:

相关内容