node.js - handling - process manager node
Ngnix upstream cerró prematuramente la conexión mientras leía el encabezado de respuesta de upstream, para solicitudes grandes (2)
Creo que el error de Nginx indica que la conexión fue cerrada por su servidor nodejs (es decir, "ascendente"). ¿Cómo se configura nodejs?
Estoy usando nginx y el servidor de nodos para atender las solicitudes de actualización. Obtengo un tiempo de espera de puerta de enlace cuando solicito una actualización de datos de gran tamaño. Vi este error en los registros de error de nginx:
2016/04/07 00:46:04 [error] 28599 # 0: * 1 conexión prematuramente cerrada aguas arriba mientras lee el encabezado de respuesta desde la parte superior, cliente: 10.0.2.77, servidor: gis.oneconcern.com, solicitud: "GET / update_mbtiles / atlas19891018000415 HTTP / 1.1 ", flujo ascendente:" http://127.0.0.1:7777/update_mbtiles/atlas19891018000415 ", host:" gis.oneconcern.com "
Busqué el error en Google e intenté todo lo que pude, pero sigo teniendo el error.
Mi nginx conf tiene estas configuraciones de proxy:
##
# Proxy settings
##
proxy_connect_timeout 1000;
proxy_send_timeout 1000;
proxy_read_timeout 1000;
send_timeout 1000;
Así es como mi servidor está configurado
server {
listen 80;
server_name gis.oneconcern.com;
access_log /home/ubuntu/Tilelive-Server/logs/nginx_access.log;
error_log /home/ubuntu/Tilelive-Server/logs/nginx_error.log;
large_client_header_buffers 8 32k;
location / {
proxy_pass http://127.0.0.1:7777;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ''upgrade'';
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
}
location /faults {
proxy_pass http://127.0.0.1:8888;
proxy_http_version 1.1;
proxy_buffers 8 64k;
proxy_buffer_size 128k;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ''upgrade'';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Estoy usando un backend de nodejs para atender las solicitudes en un servidor aws. El error de puerta de enlace aparece solo cuando la actualización lleva mucho tiempo (alrededor de 3-4 minutos). No obtengo ningún error para actualizaciones más pequeñas. Cualquier ayuda será muy apreciada.
Código del nodo js:
app.get("/update_mbtiles/:earthquake", function(req, res){
var earthquake = req.params.earthquake
var command = spawn(__dirname + ''/update_mbtiles.sh'', [ earthquake, pg_details ]);
//var output = [];
command.stdout.on(''data'', function(chunk) {
// logger.info(chunk.toString());
// output.push(chunk.toString());
});
command.stderr.on(''data'', function(chunk) {
// logger.error(chunk.toString());
// output.push(chunk.toString());
});
command.on(''close'', function(code) {
if (code === 0) {
logger.info("updating mbtiles successful for " + earthquake);
tilelive_reload_and_switch_source(earthquake);
res.send("Completed updating!");
}
else {
logger.error("Error occured while updating " + earthquake);
res.status(500);
res.send("Error occured while updating " + earthquake);
}
});
});
function tilelive_reload_and_switch_source(earthquake_unique_id) {
tilelive.load(''mbtiles:///''+__dirname+''/mbtiles/tipp_out_''+ earthquake_unique_id + ''.mbtiles'', function(err, source) {
if (err) {
logger.error(err.message);
throw err;
}
sources.set(earthquake_unique_id, source);
logger.info(''Updated source! New tiles!'');
});
}
Gracias.
Lo resolví estableciendo un valor de tiempo de espera más alto para el proxy:
location / {
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_pass http://localhost:3000;
}