公司服务在是使用PM2的cluster模式启动node应用时,Node总是返回500 Internal Privoxy Error内部服务器错误,并且node的代码请求远程的后台tomcat服务器也是无法到达的,而是用PM2的fork模式则正常工作,提示内部代理错误,而我们是没有做任何代理的,后来换了个环境测试PM2的cluster和fork模式则正常工作,因此大慨可以猜测到原因有以下几个:

  1. 环境变量造成的问题(代理错误)
  2. PM2的cluster和fork模式网络的工作方式不一样

接下来我们就是换个环境测试,发现在不同的环境是可以正常工作的,因此可以确定很大一部分的原因是由于环境问题造成,因此我们在线上把整个环境重新安装一次,此时则发现一个更为严重的问题--PM2某个文件总是使用node 0.12版本的路径,而这个版本是不存在服务器中的,又折腾一把

原因

这么多问题,其实都是由于PM2的缓存问题造成的,PM2的会扫描系统环境变量并且保存下来,这样就不用每次都去扫描一次系统环境变量,在这里解释一下代理错误的问题,因为之前同事设置代理的环境变量,从而造成PM2直接走代理

清除缓存

sudo rm -rf ~/.pm2

清除缓存后可以正常启动

无法解释的问题

fork模式没有受到代理环境变量的影响,cluster则读取环境变量的参数