Wartungsseite zu Nginx, Best Practices

13

Ich möchte den Server so konfigurieren, dass eine Wartungsseite angezeigt wird, wenn sie vorhanden ist. Ich habe diesen Code ausprobiert und funktioniert:

location / {
    try_files /maintenance.html $uri $uri/ @codeigniter;
}

Mir ist jedoch aufgefallen, dass ein Statuscode von 200 angezeigt wird und Suchmaschinen verwirrt werden können. Ich denke, die beste Vorgehensweise wäre, einen 503-Statuscode zurückzugeben. Bei Google finde ich einige relevante Seiten dazu, wie diese . Sie verwenden jedoch if, um die Weiterleitung durchzuführen, und laut Nginx-Dokumentation ist es nicht sicher, ifs zu verwenden.

Gibt es eine Möglichkeit, es ohne if zu tun? Ist die Verwendung in diesem Fall ungefährlich?

Vielen Dank.

NeDark
quelle

Antworten:

7

Ich denke, die beste Vorgehensweise wäre, einen 500-Statuscode zurückzugeben.

Ich denke du meinst 503 statt 500.

Sie verwenden if, um die Umleitung zu machen, und laut Nginx-Dokumentation ist es nicht sicher, ifs zu verwenden.

Nein , nur returnist 100% sicher innen ifin locationZusammenhang.

Gemäß der Nginx-Dokumentation können Sie einen HTTP-Statuscode als letztes Argument für angeben try_files. Ich habe es versucht, aber es hat nicht funktioniert.

Quanten
quelle
21

Hier ist was ich tue.

            if (-f $document_root/maintenance.html) {
                    return 503;
            }
            error_page 503 @maintenance;
            location @maintenance {
                    rewrite ^(.*)$ /maintenance.html break;
            }

Wenn die Datei dort ist, wird die Wartungsseite angezeigt. Sobald Sie die Datei entfernt haben, kehren Sie zum Normalzustand zurück.

Mike
quelle
1
Ja, das ist derselbe Code, der auf dem Link in der Frage steht. Ich frage tatsächlich, ob es sicher ist, ifs in diesem Fall zu verwenden, da es laut Dokumentation nicht verwendet werden sollte .
NeDark
1
Und dieselbe Dokumentation: In some cases it's also possible to move ifs to server level (where it's safe as only other rewrite module directives are allowed within it).Die von Mike gezeigte Wartungsfehlerseite wird normalerweise im {} Serverkontext festgelegt.
Regan
1
Ich habe das Gleiche getan, nur dass ich eine 'return 503' ausgeführt habe, ohne die Existenz der Datei zu überprüfen. Auf diese Weise kann ich die Site (unter Verwendung von Debians "sites-available" / "sites-enabled" -Layout) einfach durch Verknüpfen aktivieren / deaktivieren und die Wartungsseite einschalten.
Asfand Qazi
1
Klingt so, als wäre dies ein Leistungstreffer: NGINX muss bei jeder Anforderung prüfen, ob eine Datei vorhanden ist ...
Marc
1
Marc, das ist es nicht, da Dateien, auf die häufig zugegriffen wird, im Dateisystem-Cache gespeichert sind, der sich im Speicher befindet.
Mike