Ich muss einen 503-Statuscode von einer meiner Sites zurückgeben, während die Wartung in der altbewährten SE_firendly-Form ausfällt. Ich kann nicht scheinen, um herauszufinden, wie man das macht, ohne externe Skripte aufzurufen, die ich lieber vermeiden möchte.
Gibt es eine Apache-Direktive, mit der ich einen beliebigen HTTP-Statuscode zurückgeben kann, ohne auf Hacks wie das Aufrufen eines PHP-Skripts zurückgreifen zu müssen, das den Status-Header setzt?
apache-2.2
http
seo
Dan Mackinlay
quelle
quelle
Antworten:
Dies dient jeder Anfrage einer statischen Halteseite zusammen mit dem 503-Status.
RedirectMatch wird verwendet, um die Halteseite selbst zu negieren, wodurch andernfalls eine Endlosschleife erstellt würde.
mod_header wird verwendet, um einen Retry-After-Header festzulegen, damit Sie Google / anderen Bots usw. mitteilen können, dass Sie in diesem Beispiel nach 18000 Sekunden (5 Stunden) eine Sicherungskopie erstellen sollen. Sie können
sudo ap2enmod header
mod_header aktivieren (was für die Header-Direktive erforderlich ist).quelle
RedirectMatch 503 ^/(?!\.Error/.*|dragonlord-bg\.jpg)
.Versuchen
Von http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirect :
Zusätzlicher Hinweis: Hiermit wird das standardmäßige / konfigurierte Fehlerdokument für den 503-Fehler angezeigt.
quelle
Redirect 503 /
scheint zu funktionieren.Um Ihren Wartungsmodus flexibler zu gestalten, legen Sie 503 fest, wenn eine spezielle Datei vorhanden ist.
HINWEIS: Der Speicherort von DOCUMENT_ROOT kann zwischen httpd 2.2 und 2.4 variieren
Auf diese Weise müssen Sie nur "touch /path/to/docroot/.maintenance" ausführen, und Ihre Site gibt sofort 503 zurück. Erstellen Sie anschließend eine benutzerdefinierte, gut formatierte HTML-Fehlerseite, und fügen Sie Folgendes zur Konfigurationsdatei des richtigen Apache-Servers hinzu:
Und für Bonuspunkte, wenn Sie mehrere Webserver haben, machen Sie entweder den Speicherort von .maintenance auf einem gemeinsam genutzten Dateisystem oder für noch mehr Bonuspunkte:
pdsh -w $web1_ip,$web2_ip,$web3_ip "sudo touch /path/to/docroot/.maintenance"
Der Vorteil der Dateibasierung im Wartungsmodus besteht darin, dass sie funktioniert, wenn Ihre Anwendung dies nicht tut. Sie ist schnell und einfach und für einen Frontend-Caching-Proxy einfacher zu handhaben, da Sie alle Backend-503-Vorgänge auf einen Schlag handhaben können.
Quellen:
quelle