Nagios springt beim Neuladen (F5) auf die Startseite zurück

05. Februar 2010

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.

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 Webserver und der Browser nicht mehr wissen, ob diese Seite im Cache behalten werden darf, oder nicht.

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.

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-Controll 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.