Vraag Een stroomopwaarts antwoord wordt gebufferd op een tijdelijk bestand


Ik heb een vrij grote en trage (complexe data, complexe frontend) webapplicatie ingebouwd in RoR en bediend door Puma met nginx als reverse proxy. Als ik naar het nginx-foutenlogboek kijk, zie ik nogal wat ingangen zoals:

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"

Ik vind het nogal curieus omdat het zeer onwaarschijnlijk is dat die pagina hetzelfde blijft voor verschillende gebruikers en verschillende gebruikersinteracties, en ik denk niet dat het bufferen van het antwoord op schijf noodzakelijk / nuttig is.

Ik weet het van proxy_max_temp_file_size en stel het in op 0, maar het lijkt mij een beetje lastig voor mij (mijn proxy probeert te bufferen maar heeft geen bestand waar naartoe moet worden gebufferd ... hoe kan dat sneller?).

Mijn vragen zijn:

1) Hoe kan ik de [warn] verwijderen en bufferingreacties vermijden? Is het beter om proxy_buffering uit te zetten of proxy_max_temp_file_size in te stellen op 0? Waarom?

2) Als nginx een antwoord buffert wanneer levert dit de gebufferde respons op, aan wie en waarom?

3) Waarom nginx standaard proxy_buffering inschakelt en vervolgens [waarschuwt] u als het daadwerkelijk een antwoord buffert?

4) Wanneer triggert een reactie die mogelijkheid? Wanneer het meer dan enkele seconden duurt (hoeveel?) Om het antwoord te bedienen? Is dit configureerbaar?

TIA, ngw


46
2018-04-08 08:01


oorsprong


Ik heb het gevoel dat je buffering verwart met caching. De buffering is de procedure die het laden van meer gegevens toestaat dan toegestaan ​​door geheugentoewijzing. - Slavic


antwoorden:


1) Hoe kan ik de [warn] verwijderen en bufferingreacties vermijden? Is het beter om proxy_buffering uit te zetten of proxy_max_temp_file_size in te stellen op 0? Waarom?

Je zou moeten instellen proxy_max_temp_file_size op 0 om het te verwijderen. De proxy_buffering richtlijn is niet direct gerelateerd aan de waarschuwing. U kunt het uitschakelen om het bufferen helemaal te stoppen, maar dat wordt in het algemeen niet aanbevolen (tenzij dat nodig is voor Komeet).

2) Als nginx een antwoord buffert wanneer levert dit de gebufferde respons op, aan wie en waarom?

Het servers onmiddellijk, maar een client heeft meestal een veel langzamere verbinding en kan de responsgegevens niet zo snel consumeren als deze geproduceerd door uw applicatie. Nginx probeert de hele respons te bufferen om uw applicatie zo snel mogelijk vrij te geven.

Zie ook: http://aosabook.org/en/nginx.html

3) Waarom nginx standaard proxy_buffering inschakelt en vervolgens [waarschuwt] u als het daadwerkelijk een antwoord buffert?

Zoals ik al zei, de proxy_buffering is niet direct gerelateerd aan de waarschuwing. Het is over het algemeen nodig voor geoptimaliseerde proxy-bewerkingen en als u het uitschakelt, neemt de prestaties en doorvoer af.

Nginx waarschuwt u alleen wanneer een antwoord niet past in geconfigureerde geheugenbuffers. U mag de waarschuwing negeren als u dat goed vindt.

4) Wanneer triggert een reactie die mogelijkheid? Wanneer het meer dan enkele seconden duurt (hoeveel?) Om het antwoord te bedienen? Is dit configureerbaar?

Het wordt geactiveerd als geheugenbuffers vol zijn. Kijk alsjeblieft naar de documenten, het hele mechanisme wordt uitgelegd: http://nginx.org/r/proxy_max_temp_file_size

Mogelijk wilt u geheugenbuffers verhogen.


59
2018-04-08 11:17



Voor # 1, hoe kan het verwijderen van de maximale grootte van tijdelijke bestanden de bufferwaarschuwing voorkomen? Ik denk niet dat dit klopt, want ik heb deze richtlijn ingesteld op 0 en ontvang nog steeds waarschuwingen. - Phil


De volgende configuratie werkt prima op mijn server.

proxy_buffers 16 16k;  
proxy_buffer_size 16k;

10
2017-07-04 15:51



Is de tweede richtlijn overbodig, d.w.z. de 16k in de eerste regel doet precies hetzelfde als de tweede regel? - EoghanM
@EoghanM volgens de documenten, nee. Proxy_Buffer_size (buffer, niet meervoud) is van toepassing op het eerste deel van het antwoord van de proxyserver (ook bekend als de headers) 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 is voor de rest van het antwoord. - cde
Je hebt vandaag wat van mijn haar gered. Ik bewoog nginx van onze server naar een docker-container en het begon ONGELOOFLIJK langzaam te gaan. Dit "maakte het". Niet zeker of de versie op onze server dit standaard wel of niet had, maar degene in de container had deze instellingen beslist nodig. - Krystian