4

我通常每周处理至少两打服务器。我认为创建一个脚本来查询它们中的每一个并确定它们是否“启动”是一个好主意。

  • 服务器运行 Apache2 或 IIS7。
  • 托管服务提供商各不相同
  • 每台服务器上通常有多个站点
  • 设置不一致,当您直接访问 ip 时,并不总是有默认的 apache“hello world”页面。
  • 站点都是虚拟主机

我在想,确定它们是否启动的最佳方法是从每台服务器获取一个站点并发出 http HEAD 请求以确保服务器的响应为 200 OK?显然,如果出现以下情况,这很容易出现“误报”:

  1. 站点配置/设置在应返回 4xx 错误代码时不正确地返回 200 OK
  2. 如果单个站点 ( <VirtualHost>) 的配置被禁用,或者该站点已移动到不同的服务器。

但在大多数情况下,一个 HEAD 请求和依赖 200 OK 应该是可靠的,对吧?以及确保域的 A 记录与站点移动时列出的内容相匹配。

伪代码:

import http

list = {
  '72.0.0.0' : 'domain.com',
  '71.0.0.0' : 'blah.com',
}

serverNames = {
  'jetty' : '72.0.0.0',
  'bob'   : '71.0.0.0'
}

for each ( list as server => domain ) { 
    headRequest = http.head( domain )
    if ( headRequest.response == 200 && http.arecord(domain) == server ) { 
       print serverNames[server] + ' is up ';
    } else {
       print 'Server is either down or the site attached to the server lookup has moved.';
    }
}

我可能会用 Python 或 PHP 编写脚本,但这个问题只是讨论逻辑。

4

1 回答 1

3

逻辑在我看来是合理的。我建议将其扩展为在您的 apache 服务器上使用 mod_status 模块。进行头部检查后,还尝试获取 /server-status 并使用它来仔细检查您的服务器是否健康。我在想这样的事情:

statusRequest = http.get('/server-status')
if(statusRequest == 200) {
 // Make sure you don't have insane load averages, etc
}
else { /* Check something IIS specific, or just be happy the head check worked */ }

我过去使用的另一种技术是也检查我知道应该给出 404 的东西。这样你就有更好的机会知道服务器是否只是向任何询问的人分发 200。(由于配置错误,我看过一次)

于 2010-08-02T21:16:28.360 回答