Frage nginx - Der Client-Anfragetext wird in eine temporäre Datei gepuffert


Ich erhalte den folgenden Fehler in meinen Protokolldateien, wenn ich versuche, eine große Datei hochzuladen.

a client request body is buffered to a temporary file /var/lib/nginx/body/0000000001

Obwohl die Datei erfolgreich hochgeladen wurde, erhalte ich immer den obigen Fehler.

Ich habe das erhöht client_body_buffer_size zu 1000m Ich erwarte, dass die größte hochgeladene Datei ist. Dies ist jedoch nur eine Vermutung, und obwohl ich diesen Fehler nicht mehr bekomme, frage ich mich, ob dies ein geeigneter Wert für das ist client_body_buffer_size?

Ich würde es begrüßen, wenn irgendjemand diese Richtlinie und ihre Verwendung erläutern könnte.


40
2018-05-29 20:34


Ursprung


Ich habe das wurde nicht erfolgreich hochgeladen. - Ben


Antworten:


Dies ist eine Warnung, kein Fehler. Deshalb wurde es mit vorangestellt [warn] im Protokoll.

Dies bedeutet, dass die Größe der hochgeladenen Datei größer war als der für Uploads reservierte Speicher im Speicher.

Die Richtlinie client_body_buffer_size steuert die Größe dieses Puffers.

Wenn Sie es sich leisten können, 1 GB RAM immer für den gelegentlichen Datei-Upload reserviert zu haben, dann ist das in Ordnung. Es ist eine Leistungsoptimierung, um den Upload im RAM statt in einer temporären Datei auf der Festplatte zu puffern, obwohl bei so großen Uploads ein paar zusätzliche Sekunden wahrscheinlich keine große Rolle spielen. Wenn die meisten Uploads klein sind, ist das wahrscheinlich eine Verschwendung.

Am Ende können nur Sie wirklich die Entscheidung treffen, was die richtige Größe ist.


39
2018-05-29 20:39



Ihre Antwort hat mir geholfen, eine Entscheidung zu treffen. Ich werde den Wert auf etwa 512k bis 1m senken. Es ist eine Schande, dass ich viele dieser Warnungen bekommen werde. - Abs
Durch virtueller SpeicherBei Verwendung eines großen Werts wird nicht "1 GB RAM immer für den gelegentlichen Datei-Upload reserviert". (Es wird kein RAM mehr benötigt, das für den aktuellen Upload benötigt wird.) - Kirill Bulygin
Wenn ich dies auf 50 MB setzen würde und 200 Personen gleichzeitig eine Seite anzeigen würden, würde das 10 GB Speicher belegen, oder wären die 50 MB nur für Benutzer reserviert, die einen Datei-Upload durchführen? - Codemonkey
@ Codemonkey Dieser Puffer wird nur verwendet, während ein Anfragetext hochgeladen wird. Sobald der Upload abgeschlossen ist, kann der Speicher für eine weitere Anfrage frei verwendet werden. Und wie der andere Kommentator darauf hinwies, wird während des Hochladens kein Speicher verwendet. Es hängt also davon ab, wie viele gleichzeitige Uploads Sie zu einem bestimmten Zeitpunkt durchführen. - Michael Hampton♦
Oft zehn, wahrscheinlich nie mehr als 20. 128GB Box, so habe ich viel Speicher ..! Ehrlich gesagt würde ich es tun, nur um diese [warnen] Zeilen in meinem Fehlerprotokoll loszuwerden - ich sollte sie wahrscheinlich einfach ignorieren! - Codemonkey


Wenn Sie nicht möchten, dass NginX den Body-Inhalt in einer temporären Datei speichert, können Sie Ihre Konfiguration festlegen. so was:

    client_body_buffer_size     10M;
    client_max_body_size        10M;

Wenn Sie beide Konfigurationen auf die gleiche max. Größe (in k, M oder G für kB, MB bzw. GB), verhindern Sie, dass NginX eine Temp erstellt. Datei.

Für mehr Information: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_buffer_size und http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size


13
2017-11-04 02:35



Aber mit dieser Konfiguration verhindern Sie auch alle Uploads, die größer als 10 MiB sind - Josef
@Josef: Nicht verhindern mit irgendwelchen Mitteln. Es ist nur so, dass die Anfrage auf die Festplatte gepuffert werden muss, und Sie erhalten die Warnung. Überprüfen Sie die akzeptierte Antwort. - OmarOthman
@OmarOthman, Josef hat recht wegen der client_max_body_size Parameter. Siehe die Info zu diesem Link: client_max_body_size doc.: Sets the maximum allowed size of the client request body, specified in the “Content-Length” request header field. If the size in a request exceeds the configured value, the 413 (Request Entity Too Large) error is returned to the client. Please be aware that browsers cannot correctly display this error. Setting size to 0 disables checking of client request body size. - eddy85br