Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用nginx、nodejs选择Mongodb服务器超时_Node.js_Mongodb_Nginx - Fatal编程技术网

Node.js 使用nginx、nodejs选择Mongodb服务器超时

Node.js 使用nginx、nodejs选择Mongodb服务器超时,node.js,mongodb,nginx,Node.js,Mongodb,Nginx,我在web应用程序上设置了https。看来我成功了 但是,当mongodb与nodejs连接时出现了问题 我想nginx https反向代理设置会导致这个问题,但是, 我不知道在哪里以及如何接近 如果你能帮助我,我将非常感激你 环境 Ubuntu 18.04.3 LTS Nginx 1.14.0 Mongdb4.2.3 NodeJS+Koa AWS EC2 问题 Mongodb在尝试连接时返回以下错误 来自nodejs的错误消息 服务器选择在30000毫秒后超时 来自nginx的错误消息

我在web应用程序上设置了https。看来我成功了

但是,当mongodb与nodejs连接时出现了问题

我想nginx https反向代理设置会导致这个问题,但是, 我不知道在哪里以及如何接近

如果你能帮助我,我将非常感激你

环境
  • Ubuntu 18.04.3 LTS
  • Nginx 1.14.0
  • Mongdb4.2.3
  • NodeJS+Koa
  • AWS EC2
问题 Mongodb在尝试连接时返回以下错误

  • 来自nodejs的错误消息

    服务器选择在30000毫秒后超时

  • 来自nginx的错误消息

    [错误]14495#14495:*230328上游在从上游读取响应头时过早关闭连接,客户端:210.218.178.27,服务器:songistock.net,请求:“GET/GetGroupPrice?target=UNION&dateOpt=2019-12-10 HTTP/1.1”,上游:,主机:“www.songistock.net”,参考者:“

我试过了
  • 在nginx中设置上游
  • 重新启动Ubuntu
  • 重新安装Nginx,Mogodb
设置和代码
  • /etc/nginx/可用站点
  • NodeJS代码
此代码使用https设置

const Router=require('koa-Router');
const router=新路由器();
const mongoose=require('mongoose');
const winston=require('../logger/winston');
var db=猫鼬连接;
db.once('open',function(){
winston.info(“db连接”);
});
猫鼬mongodb://localhost:27017/songi_stock', 
{useNewUrlParser:true,useUnifiedTopology:true});
如果需要更多信息。请评论。然后我将添加更多信息。 我真的很想解决这个问题


谢谢您的帮助。

我想这是因为
nginx
主要是一个HTTP服务器,所以当您重定向到Mongo时,它会尝试使用
HTTP
协议,而Mongo需要原始
TCP
连接。您应该尝试用
块包装Mongo的
服务器
上游

http{}
stream {

upstream stream_mongo_backend {
   server localhost:27017;
   }

server {
   listen 27017;

   location / {
      proxy_pass http://stream_mongo_backend;
     }
   }
}
编辑:
stream
需要与
http
块处于同一级别。您还可以在
http
块之外为
/etc/nginx/conf.d/*.conf
创建include

http{}
stream {

upstream stream_mongo_backend {
   server localhost:27017;
   }

server {
   listen 27017;

   location / {
      proxy_pass http://stream_mongo_backend;
     }
   }
}

谢谢你的回答。但当我尝试时,它不起作用。nginx表示不允许使用“stream”指令谢谢您的编辑。我刚刚尝试了您的编辑方式,但现在nginx说不允许使用“location”指令。您是将
include
放在
http
块之外还是只将
stream
放在块之外?两种方法都试试。谢谢@C.Gochev I解决了编辑答案的问题,并重新启动了mongodb服务。编辑是对的。Mongodb在测试你的答案时死了。看起来好像失败了。