web-dev-qa-db-fra.com

Nginx: comment désactiver complètement la mise en mémoire tampon du corps de la demande

J'essaie d'installer Madsonic sur ma boîte Ubuntu et d'avoir Nginx devant lui. Le problème est que je reçois toujours cet avertissement lorsque j'essaie de télécharger des trucs via l'interface Web:

31115#0: *14 a client request body is buffered to a temporary file

Cela explique également pourquoi les barres de progression dans la fenêtre de téléchargement ne fonctionnent pas. Voici ma configuration Nginx pertinente:

    # proxy the madsonic server here
    location / {
            proxy_pass                      https://madsonic-server/;
            proxy_redirect                  off;
            proxy_buffering                 off;
            proxy_request_buffering         off;
            allow                           all;
            proxy_http_version              1.1;

            proxy_set_header                Host $http_Host;
            proxy_set_header                X-Real-IP $remote_addr;
            proxy_set_header                X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header                X-Forwarded-Host $server_name;
            proxy_set_header                X-Forwarded-Proto $scheme;

            client_body_buffer_size         0;
            client_max_body_size            0;
            proxy_max_temp_file_size        0;
            proxy_read_timeout              18000;
            proxy_send_timeout              18000;

            gzip                            off;
    }

J'utilise Nginx 1.9.12 en ce moment.

Ce que j'aimerais réaliser est de faire en sorte que Nginx n'utilise pas du tout les tampons de corps de requête et simplement passer le corps de requête directement à Madsonic, quelle que soit sa taille. Est-ce seulement possible? Si tel est le cas, quelle serait la configuration correcte?

D'autres questions semblent obtenir des réponses sur la façon de définir les tailles de mémoire tampon. Je ne veux pas de tampons. Je veux transmettre directement le corps de la demande à Madsonic.

17
rad

J'ai eu le même problème lors de la configuration d'un proxy Nginx pour un registre Docker. J'ai fini par faire:

client_max_body_size 0;
proxy_http_version 1.1;
proxy_request_buffering off;

client_max_body_size devait encore être 0 pour éviter l'erreur, mais watch -n 1 du -hs . montrait clairement une différence. La mise en mémoire tampon a fait apparaître les données après la demande, aucune mise en mémoire tampon n'a fait apparaître pendant la demande.

proxy_http_version 1.1 est nécessaire en raison du codage en morceaux. Citation des documents Nginx:

Lorsque le codage de transfert par blocs HTTP/1.1 est utilisé pour envoyer le corps de la demande d'origine, le corps de la demande sera mis en mémoire tampon quelle que soit la valeur de la directive, sauf si HTTP/1.1 est activé pour le proxy.

19
Halfgaar