nginx; return response-code, wenn eine Datei vorhanden ist, mit try_files nur

Seit IfIsEvil ich habe, die versuchen, eine Konfiguration mit der Richtlinie try_files nur so, dass eine Wartung der Seite angezeigt, zusammen mit dem response-code 503, für jeden URI ohne Ausnahme, also auch für php-Seiten, wenn eine IH-Datei vorhanden ist.

Gibt es zwei Probleme mit meiner Konfiguration:

  1. Die Wartung der Seite nicht angezeigt für php-URIs.
  2. Den response-code 503 wird nicht zurückgegeben, wenn die maintenance.html Datei existiert.

Ich habe gesehen, ähnliche Fragen [1],[2] aber keines mit einer Lösung, die verwendet try_files nur (anders als die mit der if - Richtlinie) und die, die bedingungslos dient ein Wartungs-Seite mit den response-code 503, wenn die entsprechende Datei vorhanden ist. Ist solch eine Lösung möglich?

Unten ist meine aktuelle nicht funktionierende conf-Datei. Es enthält nicht eine 503-Antwort-code festlegen, weil ich nicht verstehe, wo es soll gehen, um für Sie zu arbeiten, wie oben beschrieben.

worker_processes            1;

error_log                   /var/log/nginx/error.log debug;

events {
    worker_connections      1024;
}

http {
    include                 mime.types;
    default_type            application/octet-stream;

    index                   index.php index.html index.htm;

    server {
        listen                  80;
        server_name             rpi;
        root                    /www;

        location /{
            try_files           /maintenance.html $uri $uri//index.php?$args;

            # pass the PHP scripts to FastCGI server
            location ~ \.php$ {
                try_files           $uri =404;
                fastcgi_pass        unix:/run/php-fpm/php-fpm.sock;
                fastcgi_index       index.php;
                include             fastcgi.conf;
            }
        }
    }
}

Ich denke, dass meine Frage könnte alternativ so formuliert werden, wie diese: Kann try_files gemacht werden, um zu arbeiten, wie ein if Kontrollstruktur? Wenn nicht von selbst, kann es, mit dem Ziel, zusammen mit anderen Richtlinien zu handeln, ohne die if Richtlinie?

edit: Unten ist eine Lösung mit if ich bin derzeit mit, indem Sie ihn in den server-Abschnitt:

error_page              503 @maintenance;

if (-f $document_root/maintenance.html) {
        return          503;
}

location @maintenance {
        try_files       /maintenance.html =404;
}
InformationsquelleAutor seron | 2013-05-22
Schreibe einen Kommentar