我使用nginx和node server来处理更新请求.当我请求更新 Big Data 时,网关超时.我从nginx错误日志(log)中看到了这个错误:

2016/04/07 00:46:04[错误]28599#0:*1upstream 提前关闭

我在谷歌上搜索错误,并尽我所能,但我仍然得到了错误.

我的nginx conf具有以下代理设置:

    ##
    # Proxy settings
    ##

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

这就是我的服务器的配置方式

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

}

我正在使用nodejs后端在aws服务器上为请求提供服务.只有当更新需要很长时间(大约3-4分钟)时,才会显示网关错误.对于较小的更新,我没有收到任何错误.任何帮助都将不胜感激.

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

非常感谢.

推荐答案

我认为来自Nginx的错误表明连接已被nodejs服务器关闭(即"upstream ").nodejs是如何配置的?

Node.js相关问答推荐

无法在我的 node 项目中转让Google Drive v3 API中的所有权

运行JEST测试时找不到模块&q;错误

容器端口是容器内 node 应用程序的端口吗?

正在try 使用Azure Function App上载文件时未上载文件(&Q;)

如何在Mongoose中调用动态Collection ?

如何从shell脚本中计算ecmascript模块?

如何在MongoDB中删除嵌套对象数组中的属性?

MongoDB - mongoose :如何查询这个? 填充()不起作用.它显示空

将代码转换为 ES6 Discord.js 的问题

如何刷新 youtube-data-api v3 的访问令牌

即使部署成功,也不会触发 Firebase 函数来填充 Firestore 集合.为什么?

提供静态文件到底是什么意思?

Webpack TypeScript module.hot 不存在

在多个 .env 文件之间切换,例如 .env.development 和 node.js

通过 POST 请求将数据从 node.js 服务器发送到 node.js 服务器

JavaScript 异步编程:promise 与生成器

如何从 Node.js 中的 URL 获取

Javascript在try块内设置const变量

未在 Windows 8.1 上构建的 node 包 - 缺少 Microsoft.Cpp.Default.props

expressjs app.VERB 调用中的 next() 和 next('route') 有什么区别?