【问题标题】:Nginx serves node app then randomly throws 502 errorsNginx 服务 node app 然后随机抛出 502 错误
【发布时间】:2016-03-01 23:56:05
【问题描述】:

我正在尝试使用 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 将为节点应用程序提供大约 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 错误。

【问题讨论】:

    标签: node.js nginx


    【解决方案1】:

    工作的 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;
                }
    
        }
    

    【讨论】:

    • 不幸的是,即使使用您的 conf 文件,它的行为仍然完全相同。
    • @Luke ...我想这会对你有所帮助..digitalocean.com/community/tutorials/…
    • 我已经看到了,但是没有帮助。我为应用程序提供服务没有问题,问题在于 502 错误的随机性。
    【解决方案2】:

    原来是一个僵尸流浪盒子。

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

    原来有一个 vagrant box 仍在运行,它没有出现在 vagrant global-status 上,也没有被 Vagrant Manager 找到。

    无论出于何种原因,主机在它所指的盒子之间随机切换,这就是为什么我随机收到 502 错误(来自僵尸盒子)。

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

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 1970-01-01
      • 2020-06-28
      • 2021-02-15
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多