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


26

我需要以久负盛名的SE_firendly方式从我的其中一个站点返回503状态代码以进行维护。我似乎无法弄清楚如何在不调用外部脚本的情况下做到这一点,我宁愿避免这种情况。

是否有一个apache指令,该指令将允许我返回任意的HTTP状态代码,而无需诉诸于调用设置状态标头的php脚本之类的黑客程序?


2
我不太确定运行PHP文件是否被归类为“黑客”……这恰恰是Web服务器设计的目的……
Mark Henderson

3
嗯 我认为,调用一种完整的解释性脚本语言来设置服务器响应的一行确实符合黑客的要求。在我看来,设置响应标头行而不进行复杂的变通方法似乎更接近于Web服务器的设计目标。
丹·麦金莱

Answers:


32

这将为每个请求提供一个静态保留页面以及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
+1:旁注:您只能添加[RedirectMatch 503。*]和[Header始终设置Retry-After“ 18000”]规则,并且它可以处理默认的503错误消息。检查conf.d / localized-error-pages文件是否为不同的语言设置了不同的消息(那些消息需要协商,别名和包含模块)。
lepe 2012年

有用!对于我的个人网站,我使用RedirectMatch 503 ^/(?!\.Error/.*|dragonlord-bg\.jpg)
bwDraco 2014年

7

尝试

Redirect 503 / /

http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirect

通过将数字状态代码作为status的值,可以返回其他状态代码。如果状态在300到399之间,则必须存在URL参数,否则必须将其省略。请注意,Apache代码必须知道该状态(请参见http_protocol.c中的send_error_response函数)。

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


谢谢大卫。mod_alias不是我期望找到答案的地方,但似乎可以完成任务。
丹·麦金莱

是的,重定向并不是您正在做的事情的正确动词:)
David Pashley 2009年

重定向503丢失了一个始终为强制性的URL路径。另一方面,如果重定向的代码不是

1
我在执行此操作时遇到错误:“重定向带有两个或三个参数,一个可选状态,然后是要重定向的文档和目标URL”,能否在上下文中提供更完整的示例?
汤姆(Tom)

4
Redirect 503 /似乎有效。
mpartel 2014年

0

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

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

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

这样,您所需要做的就是“触摸/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。

资料来源:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.