Das Problem

Beim Aktualisieren der Nagios Weboberfläche mit der Taste F5 oder einem Druck auf den "Aktualisieren" Button im Browser springt die Nagios Webseite auf die Hauptseite zurück.

Dieses Verhalten tritt seit der Nagios Version 3.2.0 auf. Vorher wurde beim Aktualisieren der Seite z.B. mit F5 die gerade aktive Seite neu geladen und es konnte wie gewohnt auf der aktualisierten Seite weiter arbeiten.

Die Ursache

In der Nagios Version 3.2.0 wurde die damalige index.html, die das Frameset der Nagios Weboberfläche darstellt, in index.php umbenannt. Das hat zur Folge, dass der Web-Server und der Browser nicht mehr wissen, ob diese Seite im Cache behalten werden darf, oder nicht.

Die Lösung

Fügen Sie folgende Zeile an den Anfang der Datei index.php ein:

<?php header("Cache-Control: max-age=7200, public"); ?>

Die Datei index.php liegt üblicherweise im Pfad /usr/local/nagios/share.

Die ersten Zeilen der Datei müssten nach der Bearbeitung wie folgt aussehen:

/usr/local/nagios/share/index.php:<?php header("Cache-Control: max-age=7200, public"); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" 
 "http://www.w3.org/TR/html4/frameset.dtd">

<html>
<head>
<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
<title>Nagios</title>
<link rel="shortcut icon" href="images/favicon.ico" type="image/ico">
</head>

<frameset cols="180,*">
<frame src="side.php" name="side" frameborder="0">
<frame src="main.php" name="main" frameborder="0">

<noframes>

… und so weiter.

Achtung: Nach der Änderung sollte der Browser neu gestartet werden, denn z.B. der Firefox nutzt an dieser Stelle temporär gespeicherte Informationen.

Der Hintergrund

Da die beteiligten Komponenten (Browser, Webserver und eventuell sogar Proxy) bei PHP-Dateien nicht wissen, ob die Anfrage gecacht werden darf, wird diese Seite in jedem Fall komplett neu vom Webserver angefragt und erstellt.

Das hat zur Folge, dass die Seite vom Browser neu geladen wird. Dabei kann die aktuelle Seite im Frameset nicht übernommen werden. Daher wird die Default-Seite des Framesets geladen.

Innerhalb einzelner PHP-Seiten lässt sich mit PHP-Mitteln das Caching- Verhalten des Webservers und des Browsers beeinflussen. Das Caching-Verhalten wird mit dem HTTP-Header Cache-Control beeinflusst. Dieser Header kann mit der PHP-Funktion header() gesetzt werden.

HTTP-Header müssen vor der ersten Ausgabe der Seite gesetzt werden. Also muss der folgende Code direkt in die erste Zeile der index.php eingefügt werden.

Wissensbank Linux

Diese Artikel wurden vom Gründer von Checkmk vor vielen Jahren geschrieben. Sie sind immer noch gültig und haben deshalb weiterhin ihr Zuhause auf dieser Webseite. Mathias hat in der Zwischenzeit die Monitoringlösung Checkmk entwickelt

Mehr zu Checkmk