Ich habe eine ziemlich große und langsame (komplexe Daten, komplexes Frontend) Webanwendung eingebaut RoR
und Puma
mit einem nginx
Reverse-Proxy bedient. Wenn nginx
ich mir das Fehlerprotokoll ansehe, 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 bin ziemlich neugierig, da es sehr unwahrscheinlich ist, dass die Seite für verschiedene Benutzer und verschiedene Benutzerinteraktionen gleich bleibt, und ich würde nicht denken, dass das Puffern der Antwort auf der Festplatte notwendig / nützlich ist.
Ich kenne es proxy_max_temp_file_size
und setze es auf 0, aber es scheint mir ein bisschen umständlich (mein Proxy versucht zu puffern, hat aber keine Datei zum Puffern ... wie kann das schneller sein?).
Meine Fragen sind:
Wie kann ich die [Warnung] entfernen und das Puffern von Antworten vermeiden? Ist es besser auszuschalten
proxy_buffering
oderproxy_max_temp_file_size
auf 0 zu setzen ? Warum?Wenn
nginx
eine Antwort gepuffert wird: Wann wird die gepufferte Antwort an wen und warum gesendet?Warum
nginx
schaltet sichproxy_buffering
standardmäßig aktiviert und dann [warnen] s Sie , ob es tatsächlich eine Antwort Puffer?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.
Antworten:
Sie sollten
proxy_max_temp_file_size
auf 0 setzen, um es zu entfernen. Dieproxy_buffering
Anweisung steht in keinem direkten Zusammenhang mit der Warnung. Sie können es ausschalten, um das Puffern zu stoppen. Dies wird jedoch im Allgemeinen nicht empfohlen (es sei denn, es wird für Comet benötigt ).Es 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
Wie ich bereits erwähnte,
proxy_buffering
hängt das nicht direkt mit der Warnung zusammen. Es wird im Allgemeinen für optimierte Proxy-Vorgänge benötigt, und das Deaktivieren beeinträchtigt die Leistung und den Durchsatz.Nginx warnt Sie nur, wenn eine Antwort nicht in konfigurierte Speicherpuffer passt. Sie können die Warnung ignorieren, wenn dies für Sie in Ordnung ist.
Es wird ausgelöst, wenn die Speicherpuffer voll sind. Schauen Sie sich die Dokumentation an, der gesamte Mechanismus wird erklärt: http://nginx.org/r/proxy_max_temp_file_size
Möglicherweise möchten Sie den Speicherpuffer erhöhen.
quelle
proxy_max_temp_file_size
,0
oder ist dies nur eine Möglichkeit, diese Warnung zu entfernen?Die folgende Konfiguration funktioniert auf meinem Server einwandfrei.
quelle
16k
in der ersten Zeile macht genau dasselbe wie die zweite Zeile?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.