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

17

J'essaie de configurer Madsonic sur ma boîte Ubuntu et de faire tourner Nginx devant. 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, c'est de faire en sorte que Nginx n'utilise pas du tout les tampons de corps de requête et qu'il passe simplement 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.

rad
la source
Vous ne pouvez pas l'éteindre. Vous ne pouvez définir que la taille du tampon.
Michael Hampton
@MichaelHampton mais qu'en est-il de cette explication?
rad
Ah, tu as raison. Et vous avez répondu à votre propre question, semble-t-il.
Michael Hampton
@MichaelHampton bien, oui, sauf qu'il n'est toujours pas éteint pour une raison quelconque :(
rad
Une chance avec ça? J'ai le même problème selon le paramètre de documentation proxy_request_buffering de fera l'affaire, mais il tamponne toujours les téléchargements.
alejandrodnm

Réponses:

17

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_sizedevait encore être 0 pour éviter l'erreur, mais a watch -n 1 du -hs .clairement montré 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.1est nécessaire en raison du codage en morceaux. Citation des documents Nginx:

Lorsque le codage de transfert fragmenté 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.

Halfgaar
la source