Il problema
Quando si aggiorna l'interfaccia web di Nagios con il tasto F5 o premendo il pulsante ʻRefresh' nel browser, la pagina web di Nagios torna alla pagina principale.
Questo comportamento è apparso per la prima volta con la versione 3.2.0 di Nagios. In precedenza, quando si aggiornava la pagina, ad esempio premendo F5, la pagina attualmente attiva veniva ricaricata e l'utente poteva continuare a lavorare come al solito sulla pagina aggiornata.
La causa
Nella versione 3.2.0 di Nagios il precedente index.html
, che rappresenta il frameset dell'interfaccia web di Nagios, è stato rinominato in index.php
. Di conseguenza, il server web e il browser non sanno più se questa pagina può essere mantenuta nella cache o meno.
La soluzione
Aggiungere la seguente riga all'inizio del file index.php
:
<?php header("Cache-Control: max-age=7200, public"); ?>
Il file index.php
si trova solitamente nel percorso /usr/local/nagios/share
.
Le prime righe del file dovrebbero avere questo aspetto dopo la modifica:
/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>
... e così via.
Attenzione: Dopo la modifica, il browser deve essere riavviato, perché, ad esempio, Firefox utilizza le informazioni temporaneamente memorizzate in questo momento.
Lo sfondo
Poiché i componenti coinvolti (browser, server web ed eventualmente anche proxy) nel caso dei file PHP non sanno se la richiesta può essere memorizzata nella cache, questa pagina viene sempre richiesta e creata completamente nuova dal server web.
Questo fa sì che la pagina venga ricaricata dal browser. La pagina corrente nel frameset non può essere ripresa. Pertanto, viene caricata la pagina predefinita del frameset.
All'interno delle singole pagine PHP, il comportamento della cache del server web e del browser può essere influenzato dalle funzioni PHP. Il comportamento della cache è influenzato dall'intestazione HTTP Cache-Control
. Questa intestazione può essere impostata con la funzione PHP header()
.
Le intestazioni HTTP devono essere impostate prima del primo output della pagina, quindi il codice deve essere inserito direttamente nella prima riga del file index.php
.