Tengo bastante grandes y lentos (datos complejos, complejos frontend) de aplicaciones web construir en RoR
y servido por Puma
la nginx
proxy como inversa. Mirando el nginx
registro de errores, veo bastantes entradas como:
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"
Tengo curiosidad, ya que es muy poco probable que la página siga siendo la misma para diferentes usuarios y diferentes interacciones de los usuarios, y no creo que sea necesario / útil almacenar en búfer la respuesta en el disco.
Lo sé proxy_max_temp_file_size
y lo configuro en 0, pero me parece un poco incómodo (mi proxy intenta almacenar en búfer, pero no tiene ningún archivo donde almacenar ... ¿cómo puede ser más rápido?).
Mis preguntas son:
¿Cómo puedo eliminar la [advertencia] y evitar el almacenamiento en búfer de respuestas? ¿Es mejor apagar
proxy_buffering
o establecerproxy_max_temp_file_size
en 0? ¿Por qué?Si
nginx
almacena una respuesta: ¿Cuándo sirve la respuesta almacenada, a quién y por qué?¿Por qué se
nginx
enciendeproxy_buffering
por defecto y luego [te advierte] si en realidad amortigua una respuesta?¿Cuándo una respuesta activa esa opción? Cuando se tarda> unos segundos (¿cuántos?) Para servir la respuesta? ¿Es esto configurable?
TIA, ngw.
Respuestas:
Debe establecerlo
proxy_max_temp_file_size
en 0 para eliminarlo. Laproxy_buffering
directiva no está directamente relacionada con la advertencia. Puede desactivarlo para detener cualquier almacenamiento en búfer, pero eso no se recomienda en general (a menos que sea necesario para Comet ).Servirá de inmediato, pero un cliente generalmente tiene una conexión mucho más lenta y no puede consumir los datos de respuesta tan rápido como los produce su aplicación. Nginx intenta almacenar la respuesta completa para liberar su aplicación lo antes posible.
Ver también: http://aosabook.org/en/nginx.html
Como ya mencioné, el
proxy_buffering
no está directamente relacionado con la advertencia. Generalmente se necesita para operaciones proxy optimizadas y desactivarlo degrada el rendimiento y el rendimiento.Nginx solo le advierte cuando una respuesta no cabe en los buffers de memoria configurados. Puede ignorar la advertencia si está bien para usted.
Se dispara cuando las memorias intermedias están llenas. Por favor, mire los documentos, se explica todo el mecanismo: http://nginx.org/r/proxy_max_temp_file_size
Es posible que desee aumentar las memorias intermedias.
fuente
proxy_max_temp_file_size
a0
, o esto es sólo una forma de eliminar esa advertencia?La siguiente configuración funciona bien en mi servidor.
fuente
16k
en la primera línea está haciendo exactamente lo mismo que la segunda línea?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 es para el resto de la respuesta.