Mat*_*att 9 nginx node.js express reactjs
我有一个安装了Nginx的网站作为ExpressJS服务器的保留代理(代理端口3001).这使用Node和ReactJS作为我的前端应用程序.
这只是一个测试网站,目前并不为任何用户所知或使用.我把它安装在带有Ubuntu的Digital Ocean Droplet上.
每天早上醒来的时候,我都会加载我的网站并查看502 Bad Gateway.问题是,我不知道如何找出这是怎么回事.我安装了PM2,它应该会自动重启我的ExpressJS服务器但是还没有这样做,当我运行时pm2 list,我的应用程序仍然显示online:
当我运行时pm2 logs,我收到以下错误(我以管理员身份运行):
所以我将pm2 restart all重新启动应用程序,但后来我没有看到任何崩溃信息.但是在这个场合拍摄这个截图时,有几个不寻常的请求./robots.txt,/sitemap.xml而且/.well-known/security.txt,没有任何迹象表明崩溃:
当我查看我的Nginx error.log文件时,我只能看到以下内容:
然而,在我的access.log([09/Oct/2018:06:33:19 +0000])中有一些模糊不清但我不知道这意味着什么:
如果我curl localhost:3001在服务器脱机时运行,我将收到连接错误消息.我运行后这很好用pm2 restart all.
我完全坚持这一点,即使是最小的帮助也会受到极大的赞赏,即使它只是告诉我,我正在完全吠叫错误的树,需要寻找其他地方 - 谢谢.
我认为你应该检查这个github 线程,它似乎可以帮助你。
基本上,几个小时后,Nodejs 服务器停止运行,可怜的 nginx 无法转发其请求,因为侦听转发端口的服务已失效。所以会触发502错误。
这都是由于内存泄漏导致大量垃圾收集,然后导致服务器崩溃。检查一下你的内存消耗,你可能会有一些惊喜。并尝试调试您的应用程序代码,当时的一部分(依赖项)。
更新的答案:
因此,我将在我的问题中添加另一个分支,因为到目前为止它似乎对您没有帮助。您可以尝试摆脱pm2, 并使用systemd来管理您的应用程序生命周期。
创建服务文件
sudo vim /lib/systemd/system/appname.service
Run Code Online (Sandbox Code Playgroud)
这是我自己用于随机 ExpressJS 应用程序的一个简单文件:
[Unit]
Description=YourApp Site Server
[Service]
ExecStart=/home/user/appname/index.js
Restart=always
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/home/user/appname
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
请注意,如果因某种原因失败,它将尝试重新启动Restart=always
使用systemd管理它
通过以下方式注册新服务:
sudo systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)
现在从 systemd 启动您的应用程序:
sudo systemctl start appname
Run Code Online (Sandbox Code Playgroud)
从现在开始,您应该能够使用常用的 systemd 命令来管理您的应用程序生命周期。
您可以将 stdout 和 stderr 添加到 syslog 以了解您的应用程序正在做什么
StandardOutput=syslog
StandardError=syslog
Run Code Online (Sandbox Code Playgroud)
希望对更多人有帮助
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |