2016-04-07 12 views
19

Sto utilizzando nginx e il server nodo per servire le richieste di aggiornamento. Ottengo un timeout del gateway quando richiedo un aggiornamento su dati di grandi dimensioni. Ho visto questo errore dai log degli errori di nginx:Connessione Ngnix upstream prematuramente chiusa durante la lettura dell'intestazione di risposta da upstream, per richieste di grandi dimensioni

2016/04/07 00:46:04 [errore] 28599 # 0: * 1 connessione a monte prematuramente chiusa durante la lettura dell'intestazione di risposta da upstream, client: 10.0.2.77, server: gis.oneconcern.com, richiesta: "GET/update_mbtiles/atlas19891018000415 HTTP/1.1", a monte: "http://127.0.0.1:7777/update_mbtiles/atlas19891018000415", host: "gis.oneconcern.com"

ho cercato su google per l'errore ed ho provato tutto quello che potevo , ma ho ancora l'errore.

mio nginx conf ha queste impostazioni proxy:

## 
    # Proxy settings 
    ## 

    proxy_connect_timeout 1000; 
    proxy_send_timeout 1000; 
    proxy_read_timeout 1000; 
    send_timeout 1000; 

Ecco come il mio server è configurato

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; 
} 

}

Sto usando un backend nodejs per servire le richieste su un server aws. L'errore del gateway si presenta solo quando l'aggiornamento richiede molto tempo (circa 3-4 minuti). Non ricevo alcun errore per gli aggiornamenti più piccoli. Qualsiasi aiuto sarà molto apprezzato.

nodo js codice:

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!'); 
}); 
} 

Grazie.

risposta

4

Penso che l'errore di Nginx indichi che la connessione è stata chiusa dal server nodejs (ad esempio "upstream"). Come viene configurato il nodojs?

+0

Non sono sicuro di cosa si intende per config nodejs? Ho modificato la mia domanda con il codice nodejs. Inoltre, l'azione di aggiornamento non si ferma nel server nodejs, posso vedere la registrazione che si verifica anche dopo che ottengo l'errore del gateway. –

+1

Oh! Ho scoperto che il mio server di nodo invia una risposta vuota per richieste di dati di grandi dimensioni. –

+6

Ciao @DivyaKonda, puoi approfondire un po 'il modo in cui la risposta vuota ha causato errori di timeout del gateway, per favore? –

1

Ho risolto questo impostando un valore di timeout più elevato per il proxy:

location/{ 
    proxy_read_timeout 300; 
    proxy_connect_timeout 300; 
    proxy_pass http://localhost:3000; 
} 
Problemi correlati