Nginx: So deaktivieren Sie die Anforderungspufferung vollständig

17

Ich versuche Madsonic auf meiner Ubuntu-Box einzurichten und Nginx davor laufen zu lassen. Das Problem ist, dass ich immer wieder diese Warnung erhalte, wenn ich versuche, Inhalte über die Weboberfläche hochzuladen:

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

Dies erklärt auch, warum die Fortschrittsbalken im Upload-Fenster nicht funktionieren. Hier ist meine relevante Nginx-Konfiguration:

    # 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;
    }

Ich benutze momentan Nginx 1.9.12.

Was ich erreichen möchte, ist, dass Nginx überhaupt keine Anforderungskörperpuffer verwendet und den Anforderungskörper unabhängig von der Größe direkt an Madsonic weiterleitet. Ist das überhaupt möglich? Wenn ja, welche Konfiguration wäre die richtige?

Andere Fragen scheinen mit Möglichkeiten zum Festlegen der Puffergrößen beantwortet zu werden. Ich will keine Puffer. Ich möchte den Anfragetext direkt an Madsonic übergeben.

rad
quelle
Sie können es nicht ausschalten. Sie können nur die Puffergröße einstellen.
Michael Hampton
@MichaelHampton aber was ist mit dieser Erklärung?
Rad
Ah, du hast recht. Und Sie haben anscheinend Ihre eigene Frage beantwortet.
Michael Hampton
@ MichaelHampton gut, ja, außer es ist aus irgendeinem Grund immer noch nicht ausgeschaltet :(
rad
Hast du Glück damit? Ich habe das gleiche Problem gemäß der Docs-Einstellung proxy_request_buffering von wird den Trick machen, aber es puffert immer noch Uploads.
Alejandrodnm

Antworten:

17

Ich hatte das gleiche Problem beim Einrichten eines Nginx-Proxys für eine Docker-Registrierung. Am Ende machte ich:

client_max_body_size 0;
proxy_http_version 1.1;
proxy_request_buffering off;

client_max_body_sizemusste noch 0 sein, um den Fehler zu verhindern, watch -n 1 du -hs .zeigte aber deutlich einen Unterschied. Durch die Pufferung wurden die Daten nach der Anforderung angezeigt. Während der Anforderung wurde keine Pufferung durchgeführt.

proxy_http_version 1.1ist wegen Chunked Encoding notwendig. Zitat aus den Nginx-Dokumenten:

Wenn HTTP / 1.1-Chunk-Übertragungscodierung zum Senden des ursprünglichen Anforderungshauptteils verwendet wird, wird der Anforderungshauptteil ungeachtet des Anweisungswerts gepuffert, sofern HTTP / 1.1 nicht für das Proxying aktiviert ist.

Halfgaar
quelle