J'ai une application Web plutôt volumineuse et lente (données complexes, interface complexe) intégrée RoR
et servie par Puma
avec nginx
un proxy inverse. En regardant le nginx
journal des erreurs, je vois quelques entrées comme:
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"
Je suis plutôt curieux car il est très peu probable que la page reste la même pour différents utilisateurs et interactions d'utilisateur, et je ne penserais pas que la mise en mémoire tampon de la réponse sur le disque soit nécessaire / utile.
Je sais proxy_max_temp_file_size
et le mettre à 0, mais cela me semble un peu gênant (mon proxy essaie de tamponner mais n’a aucun fichier où tamponner ... comment cela peut-il être plus rapide?).
Mes questions sont:
Comment puis-je supprimer le [avertir] et éviter la mise en mémoire tampon des réponses? Est-il préférable d'éteindre
proxy_buffering
ou de mettreproxy_max_temp_file_size
à 0? Pourquoi?Si
nginx
la réponse en mémoire tampon est une réponse: Quand sert-il la réponse en mémoire tampon, à qui et pourquoi?Pourquoi est-il
nginx
activéproxy_buffering
par défaut, puis [averti] si vous mettez une réponse en mémoire tampon?Quand une réponse déclenche-t-elle cette option? Quand cela prend> quelques secondes (combien?) Pour servir la réponse? Est-ce configurable?
TIA, ngw.
Réponses:
Vous devez définir
proxy_max_temp_file_size
sur 0 pour le supprimer. Laproxy_buffering
directive n'est pas directement liée à l'avertissement. Vous pouvez l'éteindre pour arrêter toute mise en mémoire tampon, mais cela n'est pas recommandé en général (sauf si cela est nécessaire pour Comet ).Il se connecte immédiatement, mais un client a généralement une connexion beaucoup plus lente et ne peut pas utiliser les données de réponse aussi rapidement que celles produites par votre application. Nginx tente de mettre en mémoire tampon la totalité de la réponse afin de libérer votre application dès que possible.
Voir aussi: http://aosabook.org/en/nginx.html
Comme je l'ai déjà mentionné, le
proxy_buffering
n'est pas directement lié à l'avertissement. Il est généralement nécessaire pour optimiser les opérations proxy et le désactiver réduit les performances et le débit.Nginx vous avertit uniquement lorsqu'une réponse ne rentre pas dans les mémoires tampons configurées. Vous pouvez ignorer l'avertissement si cela vous convient.
Il se déclenche lorsque les mémoires tampons sont pleines. Veuillez regarder la documentation, tout le mécanisme est expliqué: http://nginx.org/r/proxy_max_temp_file_size
Vous voudrez peut-être augmenter les mémoires tampons.
la source
proxy_max_temp_file_size
sur0
ou c’est seulement un moyen de supprimer cet avertissement?La configuration suivante fonctionne bien sur mon serveur.
la source
16k
à- dire que la première ligne est identique à la deuxième ligne?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 est pour le reste de la réponse.