Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 对于决定我的服务器是否“可用”的脚本,我可以依赖什么条件;向上;?_Apache_Http_Language Agnostic_Head - Fatal编程技术网

Apache 对于决定我的服务器是否“可用”的脚本,我可以依赖什么条件;向上;?

Apache 对于决定我的服务器是否“可用”的脚本,我可以依赖什么条件;向上;?,apache,http,language-agnostic,head,Apache,Http,Language Agnostic,Head,我通常每周至少处理24台服务器。我认为创建一个脚本来查询它们并确定它们是否处于“启动”状态是个好主意 服务器运行Apache2或IIS7 托管提供商各不相同 每台服务器上通常有多个站点 设置不一致,当您直接访问ip时,并不总是有默认的apache“hello world”页面 网站都是虚拟主机 我在想,确定它们是否正常运行的最好方法是从每台服务器上获取一个站点,并发出http HEAD请求以确保服务器的响应正常吗?显然,如果: 当站点配置/设置应返回4xx错误代码时,它不正确地返回200 O

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

  • 服务器运行Apache2或IIS7
  • 托管提供商各不相同
  • 每台服务器上通常有多个站点
  • 设置不一致,当您直接访问ip时,并不总是有默认的apache“hello world”页面
  • 网站都是虚拟主机
我在想,确定它们是否正常运行的最好方法是从每台服务器上获取一个站点,并发出http HEAD请求以确保服务器的响应正常吗?显然,如果:

  • 当站点配置/设置应返回4xx错误代码时,它不正确地返回200 OK
  • 如果单个站点(
    )的配置被禁用,或者该站点已移动到其他服务器
  • 但在大多数情况下,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编写脚本,但这个问题只是讨论逻辑。

    逻辑对我来说似乎很合理。我建议扩展它,在apache服务器上使用mod_status模块。在进行头部检查之后,还要尝试获取/server状态,并使用该状态再次检查服务器是否正常。我是这样想的:

    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份。(我看过一次,因为配置不好)