我想使用 nagios 检查 SSL 网站(https)的可用性。
我已向 command.cfg 添加了一条命令:
define command{
command_name check_http_myserver_Demo
command_line $USER1$/check_http -H www.mydomain.de -u /Demo -p 443 -S
}
然后我在 localhost.cfg 中添加了一个服务:
define service {
use local-service
host_name myServer
service_description HTTP myserver Response Check
check_command check_http_myserver_Demo
max_check_attempts 2
normal_check_interval 5
retry_check_interval 1
notification_interval 240
notification_period 24x7
notification_options w,u,c,r
}
如果我使用“nagios -v nagios.cfg”检查配置文件,则不会出现任何错误。
该服务的 nagios 服务器检查结果为阴性,显示“HTTP CRITICAL - Fehler beim Empfangen”(德语;我的翻译是:“接收时出错”)。但该服务确实可用。我可以打开浏览器,并且可以毫无问题地打开 URL。
有任何想法吗?
编辑:
如果我手动运行检查,我会得到:
/usr/lib64/nagios/plugins/check_http -v -H www.c-onDocFlow.de -u / -S
GET / HTTP/1.1
User-Agent: check_http/v1.4.15 (nagios-plugins 1.4.15)
Connection: close
Host: www.c-onDocFlow.de
HTTP CRITICAL - Fehler beim Empfangen
没有“-S”它运行正常。如果我使用其他 https 端(其他域),它也可以。证书可能出了问题,但我看不出有什么问题。
答案1
您可能看不到其他任何错误,但我可以:
[me@risby]$ openssl s_client -connect www.c-onDocFlow.de:443
CONNECTED(00000003)
[...]
Certificate chain
0 s:/OU=Domain Control Validated/OU=PositiveSSL/CN=www.dbregio-nwn.de
i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=PositiveSSL CA 2
1 s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=PositiveSSL CA 2
i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
---
[much certificate stuff deleted]
---
GET /
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>503 Service Temporarily Unavailable</title>
</head><body>
<h1>Service Temporarily Unavailable</h1>
<p>The server is temporarily unable to service your
request due to maintenance downtime or capacity
problems. Please try again later.</p>
</body></html>
您说您可以使用浏览器从网络服务器获取根页面,没有问题(“该服务确实可用”);您是从 NAGIOS 服务器成功做到这一点的吗?我们能看到一些证据吗?目前,NAGIOS 似乎非常正确地告诉您,服务器根本没有提供任何内容。
答案2
以下是修复此问题的方法!
您必须编辑 /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$
}