Nagios check_http 为 HAProxy 站点提供“HTTP/1.0 503 服务不可用”

Nagios check_http 为 HAProxy 站点提供“HTTP/1.0 503 服务不可用”

我在 stackoverflow 上问过这个问题,但我认为这更适合在这里。

无法弄清楚这一点!

操作系统:CentOS 6.6(最新)

check_http当我使用 nagios检查(或 curl)查询通过 HAProxy 1.5 提供的 SSL 站点时出现以下 503 错误。

[root@nagios ~]# /usr/local/nagios/libexec/check_http -v -H example.com -S1
GET / HTTP/1.1
User-Agent: check_http/v2.0 (nagios-plugins 2.0)
Connection: close
Host: example.com


https://example.com:443/ is 212 characters
STATUS: HTTP/1.0 503 Service Unavailable
**** HEADER ****
Cache-Control: no-cache
Connection: close
Content-Type: text/html
**** CONTENT ****
<html><body><h1>503 Service Unavailable</h1>
No server is available to handle this request.
</body></html>

HTTP CRITICAL: HTTP/1.0 503 Service Unavailable - 212 bytes in 1.076 second response time |time=1.075766s;;;0.000000 size=212B;;;0
[root@nagios ~]# curl -I https://example.com
HTTP/1.0 503 Service Unavailable
Cache-Control: no-cache
Connection: close
Content-Type: text/html

但是,我可以通过任何浏览器正常访问该网站;(200 OK),也可以curl -I https://example.com从另一台服务器访问:

root@localhost:~# curl -I https://example.com
HTTP/1.1 200 OK
Date: Wed, 18 Feb 2015 14:36:51 GMT
Server: Apache/2.4.6
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Pragma: no-cache
Last-Modified: Wed, 18 Feb 2015 14:36:52 GMT
Content-Type: text/html; charset=UTF-8
Strict-Transport-Security: max-age=31536000;

HAProxy 服务器在 pfSense 2.2 上运行。

我看到 HAProxy 返回 nagios 的 HTTP/1.0 和其他地方的 HTTP/1.1。那么这是我的check_http插件导致的吗curl

我的服务器是否只是没有发送 HOST 标头?如果是这样,我该如何解决这个问题?

答案1

check_http 有一个名为的选项--sni

您需要使用该选项

答案2

您是否尝试过为 URL 添加“-u”选项?我也使用了 IP 地址和主机名。我也有 HAProxy,一开始的消息与您相同。

我使用以下命令:

./check_http -H example.com -I 8.8.8.8 -p 80 -u http://example.com/

现在开始工作!

答案3

以下是修复此问题的方法!

您必须编辑 /usr/local/nagios/etc/objects/commands.cfg 并更改 https 参数“-I” 改为 “-H”

这将告诉它查找主机名,而不是服务器配置中 http_check 块中指定的 dip 地址:/usr/local/nagios/etc/servers/yourserver.cfg

从:

    # 'check_http' command definition
define command{
        command_name    check_http
        command_line    $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
        }

到:

    # 'check_http' command definition
define command{
        command_name    check_http
        command_line    $USER1$/check_http -H $HOSTADDRESS$ $ARG1$
        }

相关内容