我正在尝试使用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错误。
答案 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/
删除此框解决了问题。