Nginx为节点应用服务,然后随机抛出502错误

时间:2016-03-01 23:56:06

标签: node.js nginx

我正在尝试使用nginx在端口3000上运行节点应用程序(使用express)。

这是我的网站的nginx.conf:

server {
        listen [::]:80 ipv6only=off;
        server_name website.dev;

        location / {
                proxy_pass http://127.0.0.1:3000;
                proxy_set_header Host $http_host;
        }
}

我正在通过nodemon任务运行节点应用程序。我也正在运行一个gulp watch任务,可以减少css,browserify,babelify等的编译。

我遇到的问题是nginx将为节点app提供大约30秒的服务,然后(显然是随机的)开始提供502错误。 nodemon任务在这些时间内不会停止,并且gulp任务也不会运行。

我找不到节点应用程序本身发生的任何错误,并且在nginx的error.log或access.log中没有显示任何错误。

我已经验证节点应用实际上是在端口3000上运行,而nginx正在侦听端口80.

以下是netstat -nlt的输出:

Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*              LISTEN     
tcp        0      0 0.0.0.0:34490           0.0.0.0:*              LISTEN     
tcp        0      0 0.0.0.0:111             0.0.0.0:*              LISTEN     
tcp6       0      0 :::22                   :::*                   LISTEN     
tcp6       0      0 :::3000                 :::*                   LISTEN     
tcp6       0      0 :::111                  :::*                   LISTEN     
tcp6       0      0 :::80                   :::*                   LISTEN     
tcp6       0      0 :::42481                :::*                   LISTEN

最后,几分钟后,nginx再次回到服务应用程序约30秒,然后重复。

如果我运行curl localhost:3000,我会获得我的节点应用。即使nginx仍会抛出502错误。

2 个答案:

答案 0 :(得分:2)

工作nginx conf文件如下所示,

upstream project{
        server  127.0.0.1:3000;
        #you can add multiple nodes here for load balancing
}
server{
            listen 80;
            server_name website.dev;
            location / {
                    proxy_pass http://project;
            }

    }

答案 1 :(得分:0)

原来是一个僵尸流浪盒。

我注意到在运行vagrant halt之后我仍然获得了nginx 502页面。所以我去寻找另一个流浪汉装置。

原来是一个仍在运行的流浪者盒子没有出现在vagrant global-status上,而且是Vagrant Manager找不到的。

无论出于何种原因,主机都在随机引用的盒子之间切换,这就是我随机获得502错误的原因(来自僵尸盒子)。

.vagrant/machines/删除此框解决了问题。