
Ich habe dies auf Stackoverflow gefragt, aber ich denke, es passt besser hierher.
Ich komme nicht dahinter!
Betriebssystem: CentOS 6.6 (aktuell)
Ich erhalte den folgenden 503-Fehler, wenn ich meine Nagios- check_http
Prüfung (oder Curl) verwende, um eine SSL-Site abzufragen, die über HAProxy 1.5 bereitgestellt wird.
[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
Ich kann jedoch über jeden Browser problemlos auf die Site zugreifen (200 OK) und auch curl -I https://example.com
von einem anderen Server aus:
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;
Der HAProxy-Server läuft auf pfSense 2.2.
Ich sehe, dass HAProxy ein HTTP/1.0 für Nagios und HTTP/1.1 von woanders zurückgibt. Ist es also mein check_http
Plugin, das das verursacht, oder ist es das curl
?
Sendet mein Server einfach nicht den HOST-Header? Wenn ja, wie kann ich das beheben?
Antwort1
check_http hat eine Option namens--sni
Sie müssen diese Option nutzen
Antwort2
Haben Sie versucht, die Option „-u“ für die URL zu verwenden? Ich habe auch die IP-Adresse und den Hostnamen verwendet. Ich habe auch einen HAProxy und dieselbe Meldung wie Sie am Anfang.
Ich habe den Befehl verwendet:
./check_http -H example.com -I 8.8.8.8 -p 80 -u http://example.com/
Und jetzt geht es an die Arbeit!
Antwort3
So beheben Sie das Problem!
Sie müssen die Datei /usr/local/nagios/etc/objects/commands.cfg bearbeiten und das https-Argument ändern.„-I“ bis „-H“
Dadurch wird es angewiesen, nach dem Hostnamen statt einer DIP-Adresse zu suchen, die in Ihrem http_check-Block in der Serverkonfiguration angegeben ist: /usr/local/nagios/etc/servers/yourserver.cfg
aus:
# 'check_http' command definition
define command{
command_name check_http
command_line $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
}
Zu:
# 'check_http' command definition
define command{
command_name check_http
command_line $USER1$/check_http -H $HOSTADDRESS$ $ARG1$
}