Die NGINX-Direktive "client_max_body_size" funktioniert nicht im Block "location"

13

Ich habe einen /adminKatalog auf meiner Website und möchte Administratoren erlauben, große Dateien über Webformulare hochzuladen. So sieht mein nginx.com aus:

http {
    # ...
    client_max_body_size 16M;
    # ...

    server {
        server_name example.com;
        root /var/www/example.com;
        index index.php;

        location /admin {
            client_max_body_size 256M;
        }

        # ...
    }
}

Das funktioniert nicht. /admin/index.phpSkript kann keine Dateien hochladen, die größer als 16 MB sind: 413 Request Entity Too Large

Wenn ich client_max_body_sizezum serverBlockieren übergehe, funktioniert alles einwandfrei. Aber ich möchte diese Änderung nicht nur für den adminKatalog vornehmen .

Nach docs , client_max_body_sizekann im Inneren platziert werden locationBlock nur für die gewünschten Pfad zu überschreiben , setzt.

Was könnte falsch sein?

Temnovit
quelle

Antworten:

13

Es funktioniert einwandfrei. Das Problem ist, dass Sie die Funktionsweise von Standorten falsch verstanden haben. Nginx wendet immer nur einen Standortblock an, niemals mehr als einen. Also, wenn Sie zwei Standorte haben

location ~ \.php$und location /adminund der URI ist /admin/index.phpdann Ihr erster Ort, der zweite nicht. Selbst wenn Sie ein Umschreiben innerhalb eines Speicherorts verwenden, verwirft nginx Anweisungen und repariert sie für den neuen Speicherort.

Dies ist auch der Grund, warum Sie immer vollständige Konfigurationen posten, damit Sie nicht verbergen, was tatsächlich falsch ist.

Martin Fjordvald
quelle
Sorry, wenn du nicht die komplette Konfiguration postest, hast du recht. Die Antwort kann nicht wahr sein. Hier ist das Beispiel aus docs: wiki.nginx.org/HttpCoreModule#location Und an anderen Stellen funktionieren mehrere Standortblöcke für mich einwandfrei .
Temnovit
1
Sorry, aber es ist 100% richtig. Nginx kann mehrere Standortblöcke durchsuchen, wendet jedoch immer nur die Anweisungen eines dieser Blöcke an. Welche es wählt, hängt von den Regeln ab, die auf der Seite dokumentiert sind, die Sie verlinkt haben.
Martin Fjordvald
@MartinFjordvald was ist die Lösung dafür?
Chaosguru
Schauen Sie sich configuration Eden Link an: nginx.org/en/docs/http/ngx_http_core_module.html#location
holmberd