Una pagina di manutenzione che restituisce 200 dice ai motori di ricerca che tutto il tuo sito adesso è una pagina con scritto «torniamo presto», e loro la indicizzeranno. La risposta giusta è 503 con un'intestazione Retry-After, che significa temporaneamente non disponibile, ripassa più tardi — e non costa niente.
Nginx
server {
# ...
if (-f /var/www/site/maintenance.on) {
return 503;
}
error_page 503 @maintenance;
location @maintenance {
root /var/www/site/public;
rewrite ^ /maintenance.html break;
add_header Retry-After 3600 always;
}
}
sudo touch /var/www/site/maintenance.on # on
sudo rm /var/www/site/maintenance.on # off
Un interruttore basato su un file significa nessun ricaricamento, nessuna modifica alla configurazione, e si può girare da uno script di rilascio.
Fai entrare te stesso
set $maint 0;
if (-f /var/www/site/maintenance.on) { set $maint 1; }
if ($remote_addr = 203.0.113.42) { set $maint 0; }
if ($maint = 1) { return 503; }
Senza un'eccezione non puoi provare la correzione che stai rilasciando, e la reazione abituale è spegnere la modalità manutenzione mentre il sito è ancora rotto. Metti dentro il tuo indirizzo prima di averne bisogno.
Che cosa dovrebbe dire la pagina
- Che è una cosa pianificata, e quando il sito torna — un orario vero, non «a breve».
- Un modo per raggiungerti che non dipenda dal sito.
- Nessuna dipendenza dall'applicazione: un file statico con il CSS dentro.
Verificala
curl -sSI https://yourdomain.com/ | grep -E '^HTTP|retry-after'
# HTTP/2 503
# retry-after: 3600
Per un rilascio che dura pochi secondi non usare affatto la modalità manutenzione: costruisci in una cartella nuova e sposta un collegamento simbolico. Nessuno vede niente — vedi Rilasciare con uno scambio atomico.