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.