I am using nginx and node server to serve update requests. I get a gateway timeout when I request an update on large data. I saw this error from the nginx error logs :
我正在使用nginx和节点服务器来提供更新请求。当我请求更新大数据时,我得到网关超时。我从nginx错误日志中看到了这个错误:
2016/04/07 00:46:04 [error] 28599#0: *1 upstream prematurely closed connection while reading response header from upstream, client: 10.0.2.77, server: gis.oneconcern.com, request: "GET /update_mbtiles/atlas19891018000415 HTTP/1.1", upstream: "http://127.0.0.1:7777/update_mbtiles/atlas19891018000415", host: "gis.oneconcern.com"
2016/04/07 00:46:04 [错误] 28599#0:* 1上游过早关闭连接,同时从上游读取响应头,客户端:10.0.2.77,服务器:gis.oneconcern.com,请求:“GET / update_mbtiles / atlas19891018000415 HTTP / 1.1“,上游:”http://127.0.0.1:7777/update_mbtiles/atlas19891018000415“,主持人:”gis.oneconcern.com“
I googled for the error and tried everything I could, but I still get the error.
我用谷歌搜索错误并尽我所能,但我仍然得到错误。
My nginx conf has these proxy settings:
我的nginx conf有这些代理设置:
##
# Proxy settings
##
proxy_connect_timeout 1000;
proxy_send_timeout 1000;
proxy_read_timeout 1000;
send_timeout 1000;
This is how my server is configured
这就是我的服务器的配置方式
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;
}
}
}
I am using a nodejs backend to serve the requests on an aws server. The gateway error shows up only when the update takes a long time (about 3-4 minutes). I do not get any error for smaller updates. Any help will be highly appreciated.
我正在使用nodejs后端来为aws服务器上的请求提供服务。仅当更新需要很长时间(大约3-4分钟)时才会显示网关错误。对于较小的更新,我不会收到任何错误。任何帮助将受到高度赞赏。
Node js code :
节点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!');
});
}
Thank you.
谢谢。
2 个解决方案
#1
6
I think that error from Nginx is indicating that the connection was closed by your nodejs server (i.e., "upstream"). How is nodejs configured?
我认为来自Nginx的错误表明连接已被nodejs服务器关闭(即“上游”)。 nodejs是如何配置的?
#2
2
I solved this by setting a higher timeout value for the proxy:
我通过为代理设置更高的超时值来解决这个问题:
location / {
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_pass http://localhost:3000;
}
#1
6
I think that error from Nginx is indicating that the connection was closed by your nodejs server (i.e., "upstream"). How is nodejs configured?
我认为来自Nginx的错误表明连接已被nodejs服务器关闭(即“上游”)。 nodejs是如何配置的?
#2
2
I solved this by setting a higher timeout value for the proxy:
我通过为代理设置更高的超时值来解决这个问题:
location / {
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_pass http://localhost:3000;
}