Eine Wartungsseite mit Status 200 sagt Suchmaschinen, Ihre gesamte Website sei jetzt eine Seite mit „bald zurück“ — und sie werden das indexieren. Die richtige Antwort ist 503 mit einem Retry-After-Header: vorübergehend nicht verfügbar, komm später wieder — und sie kostet nichts.
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
Ein Schalter über eine Datei heißt: kein Neuladen, keine Konfigurationsänderung, und er lässt sich aus einem Deploy-Skript umlegen.
Lassen Sie sich selbst hinein
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; }
Ohne Ausnahme können Sie die Korrektur, die Sie ausrollen, gar nicht testen — und die übliche Reaktion ist, den Wartungsmodus abzuschalten, während die Website noch kaputt ist. Tragen Sie Ihre eigene Adresse ein, bevor Sie sie brauchen.
Was auf der Seite stehen sollte
- Dass es geplant ist, und wann es wieder da ist — eine echte Uhrzeit, nicht „in Kürze“.
- Eine Möglichkeit, Sie zu erreichen, die nicht von der Website abhängt.
- Keine Abhängigkeit von der Anwendung: eine statische Datei mit eingebettetem CSS.
Nachprüfen
curl -sSI https://yourdomain.com/ | grep -E '^HTTP|retry-after'
# HTTP/2 503
# retry-after: 3600
Für ein Deployment, das Sekunden dauert, verwenden Sie gar keinen Wartungsmodus: bauen Sie in ein neues Verzeichnis und legen Sie einen Symlink um. Niemand sieht etwas — siehe Ausrollen mit einem atomaren Umschalter.