Frage Eine Upstream-Antwort wird in eine temporäre Datei gepuffert


Ich habe eine ziemlich große und langsame (komplexe Daten, komplexe Frontend) Web-Anwendung in RoR gebaut und von Puma mit Nginx als Reverse-Proxy bedient. Mit Blick auf das Nginx-Fehlerprotokoll sehe ich einige Einträge wie:

2014/04/08 09:46:08 [warn] 20058#0: *819237 an upstream response is buffered to a temporary file 
    /var/lib/nginx/proxy/8/47/0000038478 while reading upstream, 
    client: 5.144.169.242, server: engagement-console.foo.it, 
    request: "GET /elements/pending?customer_id=2&page=2 HTTP/1.0", 
    upstream: "http://unix:///home/deployer/apps/conversationflow/shared/sockets/puma.sock:/elements/pending?customer_id=2&page=2", 
    host: "ec.reputationmonitor.it", 
    referrer: "http://ec.foo.it/elements/pending?customer_id=2&page=3"

Ich finde es ziemlich merkwürdig, da es sehr unwahrscheinlich ist, dass diese Seite für verschiedene Benutzer und verschiedene Benutzerinteraktionen gleich bleibt, und ich denke nicht, dass das Puffern der Antwort auf der Platte notwendig / nützlich ist.

Ich weiß über proxy_max_temp_file_size und setze es auf 0, aber es scheint mir ein bisschen peinlich für mich (mein Proxy versucht zu puffern, aber hat keine Datei wo Puffer zu ... wie kann das schneller sein?).

Meine Fragen sind:

1) Wie kann ich die [warnen] entfernen und Pufferreaktionen vermeiden? Ist es besser, proxy_buffering zu deaktivieren oder proxy_max_temp_file_size auf 0 zu setzen? Warum?

2) Wenn nginx eine Antwort puffert, wann dient es der gepufferten Antwort, an wen und warum?

3) Warum aktiviert nginx proxy_buffering standardmäßig und warnt Sie dann, wenn es tatsächlich eine Antwort zwischenspeichert?

4) Wann löst eine Antwort diese Option aus? Wann dauert es> einige Sekunden (wie viele?), Um die Antwort zu liefern? Ist das konfigurierbar?

TIA, ngw


46
2018-04-08 08:01


Ursprung


Ich habe das Gefühl, dass Sie Pufferung mit Caching verwechseln. Die Pufferung ist die Prozedur, die es erlaubt, mehr Daten zu laden, als durch die Speicherzuweisung erlaubt sind. - Slavic


Antworten:


1) Wie kann ich die [warnen] entfernen und Pufferreaktionen vermeiden? Ist es besser, proxy_buffering zu deaktivieren oder proxy_max_temp_file_size auf 0 zu setzen? Warum?

Sie sollten einstellen proxy_max_temp_file_size auf 0, um es zu entfernen. Das proxy_buffering Direktive bezieht sich nicht direkt auf die Warnung. Sie können es ausschalten, um jegliche Pufferung zu stoppen, aber das wird im Allgemeinen nicht empfohlen (es sei denn, es wird benötigt für Komet).

2) Wenn nginx eine Antwort puffert, wann dient es der gepufferten Antwort, an wen und warum?

Der Server wird sofort ausgeführt, aber ein Client hat normalerweise eine viel langsamere Verbindung und kann die Antwortdaten nicht so schnell verarbeiten, wie sie von Ihrer Anwendung erstellt wurden. Nginx versucht, die gesamte Antwort zu puffern, um Ihre Anwendung so schnell wie möglich freizugeben.

Siehe auch: http://aosabook.org/en/nginx.html

3) Warum aktiviert nginx proxy_buffering standardmäßig und warnt Sie dann, wenn es tatsächlich eine Antwort zwischenspeichert?

Wie ich schon erwähnte, die proxy_buffering steht nicht in direktem Zusammenhang mit der Warnung. Es wird in der Regel für optimierte Proxy-Vorgänge benötigt, und das Ausschalten reduziert die Leistung und den Durchsatz.

Nginx warnt Sie nur, wenn eine Antwort nicht in konfigurierte Speicherpuffer passt. Sie können die Warnung ignorieren, wenn es für Sie in Ordnung ist.

4) Wann löst eine Antwort diese Option aus? Wann dauert es> einige Sekunden (wie viele?), Um die Antwort zu liefern? Ist das konfigurierbar?

Es wird ausgelöst, wenn Speicherpuffer voll sind. Bitte schauen Sie sich die Dokumentation an, der gesamte Mechanismus wird erklärt: http://nginx.org/r/proxy_max_temp_file_size

Sie möchten möglicherweise Speicherpuffer erhöhen.


59
2018-04-08 11:17



Für # 1, wie verhindert das Entfernen der Größenbeschränkung von temporären Dateien die Pufferwarnung? Ich denke nicht, dass dies richtig ist, weil ich diese Direktive auf 0 gesetzt habe und immer noch Warnungen bekomme. - Phil


Die folgende Konfiguration funktioniert auf meinem Server einwandfrei.

proxy_buffers 16 16k;  
proxy_buffer_size 16k;

10
2017-07-04 15:51



Ist die zweite Richtlinie überflüssig, d 16k in der ersten Zeile tut genau das gleiche wie die zweite Zeile? - EoghanM
@EoghanM laut der Dokumentation, nein. Proxy_Buffer_size (Puffer, nicht Plural) gilt für den ersten Teil der Antwort des Proxy-Servers (aka die Header) Sets the size of the buffer used for reading the first part of the response received from the proxied server. This part usually contains a small response header. Proxy_buffers ist für den Rest der Antwort. - cde
Du hast heute ein paar meiner Haare gerettet. Ich habe nginx von unserem Server in einen Andock-Container verschoben und es begann UNGLAUBLICH langsam zu werden. Dies "fixiert" es. Nicht sicher, ob die Version auf unserem Server standardmäßig aktiviert war oder nicht, aber die im Container benötigte diese Einstellungen. - Krystian