Tengo a Puma ejecutándose como el servidor de aplicaciones ascendente y Riak como mi clúster de base de datos de fondo. Cuando envío una solicitud de que el mapa reduce una porción de datos para aproximadamente 25K usuarios y la devuelve desde Riak a la aplicación, aparece un error en el registro de Nginx:
tiempo de espera de flujo ascendente (110: tiempo de espera de conexión agotado) mientras se lee el encabezado de respuesta
Si consulto mi upstream directamente sin proxy nginx, con la misma solicitud, obtengo los datos requeridos.
El tiempo de espera de Nginx ocurre una vez que se coloca el proxy.
**nginx.conf**
http {
keepalive_timeout 10m;
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
include /etc/nginx/sites-enabled/*.conf;
}
**virtual host conf**
upstream ss_api {
server 127.0.0.1:3000 max_fails=0 fail_timeout=600;
}
server {
listen 81;
server_name xxxxx.com; # change to match your URL
location / {
# match the name of upstream directive which is defined above
proxy_pass http://ss_api;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache cloud;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
proxy_cache_bypass $http_authorization;
proxy_cache_bypass http://ss_api/account/;
add_header X-Cache-Status $upstream_cache_status;
}
}
Nginx tiene un montón de directivas de tiempo de espera. No sé si me estoy perdiendo algo importante. Cualquier ayuda sería muy apreciada....
Respuestas:
Esto sucede porque su flujo ascendente tarda demasiado en responder la solicitud y NGINX cree que el flujo ascendente ya no pudo procesar la solicitud, por lo que responde con un error. Simplemente incluya e incremente proxy_read_timeout en el
location
bloque de configuración. Me pasó lo mismo y usé 1 hora de tiempo de espera para una aplicación interna en el trabajo:Con esto, NGINX esperará una hora (3600s) para que su flujo ascendente devuelva algo.
fuente
proxy_read_timeout
en cuenta que tener en la sección http podría no ayudar. Tengo laproxy_pass
directiva en la sección de ubicación y solo allí laproxy_read_timeout
configuración marcó la diferencia. (nginx 1.16.0)Siempre debe abstenerse de aumentar los tiempos de espera, dudo que el tiempo de respuesta del servidor de fondo sea el problema aquí en cualquier caso.
Resolví este problema borrando la bandera de mantener viva la conexión y especificando la versión http según la respuesta aquí: https://stackoverflow.com/a/36589120/479632
Desafortunadamente, no puedo explicar por qué funciona esto y tampoco logré descifrarlo de los documentos mencionados en la respuesta vinculada, por lo que si alguien tiene una explicación, me interesaría mucho escucharla.
fuente
proxy_read_timeout
si supiera que el proxy (incluso para una URL específica) requiere más tiempo de procesamiento?$http_host
derecho? Supongo que eso no volaría para https. Es posible que también se requieran configuraciones adicionales para enviar proxy a las solicitudes https.Primero descubra qué flujo ascendente se está desacelerando consultando el archivo de registro de errores nginx y ajuste el tiempo de lectura en consecuencia en mi caso fue fastCGI
Entonces tengo que ajustar fastcgi_read_timeout en la configuración de mi servidor
Ver: publicación original
fuente
En su caso, ayuda a una pequeña optimización en el proxy, o puede usar "# configuración de tiempo de espera"
fuente
proxy_pass
en la sección de ubicación .)Creo que este error puede ocurrir por varias razones, pero puede ser específico del módulo que está utilizando. Por ejemplo, vi esto usando el módulo uwsgi, así que tuve que configurar "uwsgi_read_timeout".
fuente
Recomendaría mirar el
error_logs
, específicamente en la parte ascendente, donde se muestra un flujo ascendente específico que está agotando el tiempo de espera.Luego, según eso, puede ajustar
proxy_read_timeout
,fastcgi_read_timeout
ouwsgi_read_timeout
.También asegúrese de que su configuración esté cargada.
Más detalles aquí Nginx upstream expiró (por qué y cómo solucionarlo)
fuente
Como muchos otros han señalado aquí, aumentar la configuración del tiempo de espera para NGINX puede resolver su problema.
Sin embargo, aumentar la configuración del tiempo de espera puede no ser tan sencillo como sugieren muchas de estas respuestas. Yo mismo enfrenté este problema e intenté cambiar la configuración de mi tiempo de espera en el archivo /etc/nginx/nginx.conf , como sugieren casi todos en estos hilos. Esto no me ayudó un poco; no hubo cambios aparentes en la configuración de tiempo de espera de NGINX. Ahora, muchas horas después, finalmente pude solucionar este problema.
La solución se encuentra en este hilo del foro , y lo que dice es que debe poner su configuración de tiempo de espera en /etc/nginx/conf.d/timeout.conf (y si este archivo no existe, debe crearlo). Usé la misma configuración que se sugiere en el hilo:
fuente
Tuve el mismo problema y resultó que era un error "todos los días" en el controlador de rieles. No sé por qué, pero en producción, puma ejecuta el error una y otra vez causando el mensaje:
tiempo de espera de flujo ascendente (110: tiempo de espera de conexión agotado) mientras se lee el encabezado de respuesta
Probablemente porque Nginx intenta obtener los datos de puma una y otra vez. Lo curioso es que el error causó el mensaje de tiempo de espera incluso si estoy llamando a una acción diferente en el controlador, por lo tanto, un solo error tipográfico bloquea toda la aplicación.
Verifique su archivo log / puma.stderr.log para ver si esa es la situación.
fuente
Por nuestro lado, estaba usando spdy con caché proxy. Cuando la caché caduca, obtenemos este error hasta que la caché se haya actualizado.
fuente
Espero que ayude a alguien: me encontré con este error y la causa era un permiso incorrecto en la carpeta de registro de phpfpm, después de cambiarlo para que phpfpm pudiera escribir, todo estaba bien.
fuente
Para el
proxy_upstream
tiempo de espera, probé la configuración anterior pero no funcionó.La configuración
resolver_timeout
funcionó para mí, sabiendo que me estaba tomando 30 segundos producir el mensaje de tiempo de espera ascendente. Por ejemplo, me.atwibble.com no se pudo resolver (110: Se agotó el tiempo de espera de la operación) .http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver_timeout
fuente