2016-04-07 5 views
19

Ich benutze Nginx und Node-Server, um Update-Anfragen zu dienen. Ich erhalte ein Gateway-Timeout, wenn ich ein Update für große Daten anfordere. Ich sah diesen Fehler von den Nginx-Fehlerprotokollen:Ngnix Upstream vorzeitig geschlossen Verbindung beim Lesen Antwort Header aus dem Upstream, für große Anfragen

2016/04/07 00:46:04 [Fehler] 28599 # 0: * 1 Upstream vorzeitig geschlossen Verbindung beim Lesen der Antwort-Header von Upstream, Client: 10.0.2.77, Server: gis.oneconcern.com, Anfrage: "GET/update_mbtiles/atlas19891018000415 HTTP/1.1" stromaufwärts "http://127.0.0.1:7777/update_mbtiles/atlas19891018000415" host: "gis.oneconcern.com"

gegoogelt ich für den Fehler und versucht, was ich konnte, , aber ich bekomme immer noch den Fehler.

Mein nginx conf hat diese Proxy-Einstellungen:

## 
    # Proxy settings 
    ## 

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

Dies ist, wie mein Server

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

}

ich ein NodeJS Backend verwende die Anforderungen an ein dienen aws Server. Der Gateway-Fehler wird nur angezeigt, wenn das Update sehr lange dauert (ca. 3-4 Minuten). Bei kleineren Updates bekomme ich keinen Fehler. Jede Hilfe wird sehr geschätzt.

Knoten js Code:

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

Danke.

Antwort

4

Ich denke, dass der Fehler von Nginx angibt, dass die Verbindung von Ihrem Nodejs-Server (d. H. "Upstream") geschlossen wurde. Wie ist Nodejs konfiguriert?

+0

Ich bin nicht sicher, was Sie NodeJS Config bedeuten? Ich habe meine Frage mit dem Nodejs-Code bearbeitet. Außerdem stoppt die Update-Aktion nicht auf dem Nodejs-Server. Ich kann sehen, dass die Protokollierung auch dann erfolgt, wenn ich einen Gateway-Fehler erhalte. –

+1

Oh! Ich habe herausgefunden, dass mein Knotenserver eine leere Antwort für große Datenanforderungen sendet. –

+6

Hallo @DivyaKonda, können Sie ein bisschen mehr darüber ausarbeiten, wie das Bedienen leerer Antwort bitte Gateway Timeout Fehler bitte? –

1

Ich löste dies durch einen höheren Timeout-Wert für den Proxy-Einstellung:

location/{ 
    proxy_read_timeout 300; 
    proxy_connect_timeout 300; 
    proxy_pass http://localhost:3000; 
} 
Verwandte Themen