nginx: il corpo della richiesta client è memorizzato in un file temporaneo


49

Ricevo il seguente errore nei miei file di registro ogni volta che provo a caricare un file di grandi dimensioni.

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

Sebbene il file venga caricato correttamente, ottengo sempre l'errore sopra riportato.

Ho aumentato quello client_body_buffer_sizea 1000mcui mi aspetto che sia il file più grande caricato. Tuttavia, questa è stata solo un'ipotesi e anche se non ho più quell'errore, mi chiedo se questo sia un valore appropriato da impostare per client_body_buffer_size?

Gradirei se qualcuno potesse far luce su questa direttiva e su come dovrebbe essere utilizzata.


2
Ho questo non è stato caricato con successo.
Ben

Risposte:


51

Questo è un avvertimento, non un errore. Ecco perché è stato preceduto [warn]dal registro.

Significa che la dimensione del file caricato era maggiore del buffer in memoria riservato ai caricamenti.

La direttiva client_body_buffer_sizecontrolla la dimensione di quel buffer.

Se puoi permetterti di avere 1 GB di RAM sempre riservati per il caricamento occasionale di file, allora va bene. È un'ottimizzazione delle prestazioni per bufferizzare l'upload nella RAM piuttosto che in un file temporaneo su disco, anche se con caricamenti così grandi un paio di secondi in più probabilmente non importa molto. Se la maggior parte dei tuoi caricamenti è piccola, probabilmente è uno spreco.

Alla fine, solo tu puoi davvero decidere quale sia la dimensione appropriata.


5
La tua risposta mi ha aiutato a prendere una decisione. Abbasserò il valore a circa 512k a 1m. È un peccato che riceverò molti di questi avvertimenti.
Abs

A causa della memoria virtuale , l'utilizzo di un valore elevato non comporterà "1 GB di RAM sempre riservati al caricamento occasionale di file". (Non verrà utilizzata più RAM di quella effettivamente necessaria per il caricamento corrente.)
Kirill Bulygin

1
Se lo impostassi su 50 MB e 200 persone visualizzassero una pagina nello stesso istante, occuperebbero 10 GB di memoria o i 50 MB verranno allocati solo per gli utenti che eseguono un caricamento di file?
Codemonkey,

@Codemonkey Questo buffer viene utilizzato solo durante il caricamento di un corpo di richiesta. Una volta completato il caricamento, la memoria è libera per essere utilizzata per un'altra richiesta. E come ha sottolineato l'altro commentatore, mentre un caricamento non è in corso, non viene utilizzata memoria. Quindi dipende da quanti caricamenti simultanei hai eseguito in un dato istante.
Michael Hampton

Spesso dieci, probabilmente mai più di 20. Scatola da 128 GB, quindi ho un sacco di memoria ..! Onestamente, lo farei solo per sbarazzarmi di quelle [avvertenze] righe nel mio registro degli errori - probabilmente dovrei semplicemente ignorarle!
Codemonkey,

18

Se non si desidera archiviare il contenuto del corpo in NginX in un file temporaneo, è possibile impostare la configurazione. come questo:

    client_body_buffer_size     10M;
    client_max_body_size        10M;

Se imposti entrambe queste configurazioni allo stesso max. dimensione (in k, M o G per kB, MB o GB, rispettivamente), eviterai che NginX crei una temperatura. file.

Per maggiori informazioni: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_buffer_size e http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size


8
Ma con quella configurazione impedirai anche tutti i caricamenti di dimensioni superiori a 10 MiB
Josef

@Josef: non prevenirlo in alcun modo. È solo che la richiesta dovrà essere bufferizzata su disco e riceverai l'avviso. Controlla la risposta accettata.
OmarOthman

9
@OmarOthman, Josef ha ragione a causa del client_max_body_sizeparametro. Vedi le informazioni su questo 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.