Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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后面运行Express应用程序时出现间歇性502错误网关错误_Node.js_Angularjs_Nginx_Express - Fatal编程技术网

Node.js 在Nginx后面运行Express应用程序时出现间歇性502错误网关错误

Node.js 在Nginx后面运行Express应用程序时出现间歇性502错误网关错误,node.js,angularjs,nginx,express,Node.js,Angularjs,Nginx,Express,我目前正在nginx背后运行一系列Node.js express应用程序。然而,尽管我已经让应用程序运行良好,但在某些情况下,我现在遇到了间歇性的502个坏网关错误 主实例是用户尝试登录的地方。通常,第一次尝试登录将返回502错误(此错误将是即时的,而不是在延迟后发生),而紧接其后的第二次尝试将处理得很好,请求头中没有任何更改 我已经检查了nginx和express的日志,在第一个实例中,尽管细节相同,但第一次尝试返回500错误(这是在错误登录尝试的情况下计划的)。这会在nginx中触发502错

我目前正在nginx背后运行一系列Node.js express应用程序。然而,尽管我已经让应用程序运行良好,但在某些情况下,我现在遇到了间歇性的502个坏网关错误

主实例是用户尝试登录的地方。通常,第一次尝试登录将返回502错误(此错误将是即时的,而不是在延迟后发生),而紧接其后的第二次尝试将处理得很好,请求头中没有任何更改

我已经检查了nginx和express的日志,在第一个实例中,尽管细节相同,但第一次尝试返回500错误(这是在错误登录尝试的情况下计划的)。这会在nginx中触发502错误

Nginx错误日志:

2013/10/21 19:32:57 [error] 8178#0: *32101 upstream prematurely closed connection while reading response header from upstream, client: 82.40.77.228, server: instok.net, request: "POST /login HTTP/1.1", upstream: "https://127.0.0.1:5001/login", host: "instok.net", referrer: "https://instok.net/"
- [21/Oct/2013:19:32:57 +0000] "POST /login HTTP/1.1" 502 172 "https://instok.net/" "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0" "-"82.40.77.228 - 
- [21/Oct/2013:19:32:59 +0000] "POST /login HTTP/1.1" 200 5 "https://instok.net/" "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0" "-"82.40.77.228 - 
- [Mon, 21 Oct 2013 19:32:57 GMT] \"POST /login HTTP/1.0\" 500 69 \"https://instok.net/\" 
- [Mon, 21 Oct 2013 19:32:59 GMT] \"POST /login HTTP/1.0\" 200 - \"https://instok.net/\"
Nginx访问日志:

2013/10/21 19:32:57 [error] 8178#0: *32101 upstream prematurely closed connection while reading response header from upstream, client: 82.40.77.228, server: instok.net, request: "POST /login HTTP/1.1", upstream: "https://127.0.0.1:5001/login", host: "instok.net", referrer: "https://instok.net/"
- [21/Oct/2013:19:32:57 +0000] "POST /login HTTP/1.1" 502 172 "https://instok.net/" "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0" "-"82.40.77.228 - 
- [21/Oct/2013:19:32:59 +0000] "POST /login HTTP/1.1" 200 5 "https://instok.net/" "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0" "-"82.40.77.228 - 
- [Mon, 21 Oct 2013 19:32:57 GMT] \"POST /login HTTP/1.0\" 500 69 \"https://instok.net/\" 
- [Mon, 21 Oct 2013 19:32:59 GMT] \"POST /login HTTP/1.0\" 200 - \"https://instok.net/\"
快速访问日志:

2013/10/21 19:32:57 [error] 8178#0: *32101 upstream prematurely closed connection while reading response header from upstream, client: 82.40.77.228, server: instok.net, request: "POST /login HTTP/1.1", upstream: "https://127.0.0.1:5001/login", host: "instok.net", referrer: "https://instok.net/"
- [21/Oct/2013:19:32:57 +0000] "POST /login HTTP/1.1" 502 172 "https://instok.net/" "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0" "-"82.40.77.228 - 
- [21/Oct/2013:19:32:59 +0000] "POST /login HTTP/1.1" 200 5 "https://instok.net/" "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0" "-"82.40.77.228 - 
- [Mon, 21 Oct 2013 19:32:57 GMT] \"POST /login HTTP/1.0\" 500 69 \"https://instok.net/\" 
- [Mon, 21 Oct 2013 19:32:59 GMT] \"POST /login HTTP/1.0\" 200 - \"https://instok.net/\"
服务器端身份验证

function authenticate(name, pass, fn) {

  User.findOne({_id: name}, function(err, user) {
   if (!user) {  return fn(new Error("Cannot find user"))}; 

   bcrypt.compare(pass, user.hash, function(err, res){
     if (err || !res) { return fn(err) }

     else {
        return fn(null, user);
        }
    })
  })
}

exports.logIn = function(req, res){
 authenticate(req.body.username, req.body.password, function(err, user){
  if (user){
      req.session.regenerate(function(){
        req.session.user = user;
        res.status(200).send();
      })
  }
  else {
    res.status(500).send({message: "Error with username or password - please try again"})
  }

 });
}
我的nginx.conf文件的相关部分位于,我还使用同一文件运行了其他几个node.js应用程序

在客户端,我使用Angular.js和$http.post将登录详细信息发送到服务器,并根据服务器返回的是200还是500错误进行有条件的处理

我还使用routeChangeError事件在服务器发生500错误时重定向,以重定向到登录页面,其中尝试在登录外部访问路由。但是,我认为客户端处理不相关,因为错误是在任何客户端处理之前返回的

很可能有一种更好的处理身份验证的方法,这当然可能是上述问题的解决方案,但是目前我想弄清间歇性502错误的根源

这个错误似乎是由expressreturning500引起的,而expressreturning500应该返回200,但是我无法识别这个问题,尽管对代码进行了修改。如有任何意见,我们将不胜感激。应用程序本身正在
https://instok.net
其中可以查看所有客户端代码

出于兴趣,502和有效请求的详细信息如下:

编辑


我遗漏的一点是,我使用它来保持应用程序在崩溃时运行。在检查了Forever日志后,很明显问题在于连接MongoDB数据库失败,导致应用程序崩溃。这个错误在应用程序中没有被捕获,因此,据我所知,Express日志中没有引用。现在已经解决了这个问题,而且我已经切换到另一个MongoDB实例,我希望它能够解决问题。

我相信我已经发现了问题,因为mongoose未能连接到MongoDB实例,导致了一个未捕获的错误。我现在已经处理了错误,并将数据库切换到另一个实例。Touch wood,我目前没有任何进一步的问题。

老实说,我不熟悉nginx,但您确实应该更改代码中的500个错误。50x表示服务器坏了;如果用户名/密码不匹配,您应该发送40倍的错误,很可能是401,这意味着未经授权。检查这一点,看看你的流程是否有所改善。另外,如果你自己回答问题,如果你不再需要答案,那么将问题标记为已回答,这将是一件好事,而不是编辑。今天有同样的问题吗