如何将 Apache 网站设置为 503 “临时停机”?

Posted

技术标签:

【中文标题】如何将 Apache 网站设置为 503 “临时停机”?【英文标题】:How to put Apache website to 503 "temporary down"? 【发布时间】:2010-10-11 23:16:24 【问题描述】:

RFC2616, 503 服务不可用

由于临时过载或服务器维护

,服务器当前无法处理请求

如何配置 Apache 2.2 以使用自定义 html 页面提供基于特定名称的虚拟主机 503 代码?

【问题讨论】:

【参考方案1】:

503 暂时不可用,带触发器

RewriteEngine On
RewriteCond %ENV:REDIRECT_STATUS !=503
RewriteCond "/srv/www/example.com/maintenance.trigger" -f
RewriteRule ^(.*)$ /$1 [R=503,L]

如果maintenance.trigger 文件存在,Apache 将提供503 Service Unavailable 响应。要提供自定义“停机维护”页面,请使用 ErrorDocument 指定文件,如下所示:

ErrorDocument 503 /503_with_cats.html

享受吧!

【讨论】:

不断检查文件不会减慢请求速度吗? 好问题!我没有做过任何基准测试。我假设操作系统文件系统缓存可以保持速度。 在rewrite rule中指定目标部分会误导,我更喜欢:RewriteRule ^ - [R=503,L]【参考方案2】:

你可以使用mod_rewrite:

RewriteEngine on
RewriteCond %ENV:REDIRECT_STATUS !=503
RewriteRule !^/down/for/maintenance$ %DOCUMENT_ROOTdown/for/maintenance [L,R=503]

RewriteCond 指令确保重定向到自定义错误文档时不会发生其他内部错误。

【讨论】:

很好,但是如何指定自定义“维护”页面? 错误文档 503 /down/for/maintenance/index.html 我的错误文档是指文件系统上的静态内容,所以我得到 503 的静态内容,它的裁判像 11.11.11.11 - - [15/Mar/2016:13:24:31 -0500] "GET /core/css/styles.css HTTP/1.1" 503 1985 我如何确保我的错误文档可以加载静态内容而不会得到 503 @RanPaul 您可以扩展RewriteRule 模式或添加RewriteCond 指令来匹配这些URL。例如:RewriteRule !(^/down/for/maintenance$|^/core/css/) … 它总是重定向到维护页面【参考方案3】:

@temoto

要为机器人指定 503 并为人类指定维护页面,请尝试以下操作

RewriteEngine on
RewriteBase /
#for bots such as google
RewriteCond %HTTP_USER_AGENT ^.*(Googlebot|Googlebot|Mediapartners|Adsbot|Feedfetcher|bingbot)-?(Google|Image)? [NC]
RewriteCond %ENV:REDIRECT_STATUS !=503
RewriteRule !^/down/for/maintenance$ %DOCUMENT_ROOTdown/for/maintenance [L,R=503]

#for humans
RewriteCond %REMOTE_HOST !^1\.1\.1\.1
RewriteCond %REQUEST_URI !^/maint.html [NC]
RewriteRule .* /maint.html [R=302,L]

【讨论】:

为什么要为人类使用单独的页面? 503页面可以包含内容,浏览器会显示。 在某些情况下,tomcat 可能无法提供 503 页面。因此,我们让 Apache 提供静态页面。 但是这个页面对于人类和机器人来说不一定是不同的......这种差异对我来说没有任何意义。 @AlexanderN 为什么你对机器人不太友好? @AlexanderN 您也可以将指令发送给机器人,这有什么问题?无论如何,您已经在这样做了(除了 Google 和少数其他人),因为您的正则表达式无法捕获所有机器人。

以上是关于如何将 Apache 网站设置为 503 “临时停机”?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建自定义 Apache 503 错误页面

apache tomcat 503 自定义错误页面

Varnish/Apache 随机 503 错误

如何修改 503 htaccess 规则以避免“Googlebot 无法访问您的网站”错误?

如何在 Tampermonkey 中捕获状态 503

网页503错误