如何将 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 “临时停机”?的主要内容,如果未能解决你的问题,请参考以下文章