求助帖:Nodejs环境下 PM2 + Nginx 配置问题

发布于 1周前 作者 h691938207 来自 nodejs/Nestjs

现在有个问题是,我用 PM2 启动我的 node web 项目,配合 nginx 进行访问

但是我每次 PM2 reload 的时候,会有部分用户出现 502 的情况

我个人觉得是 node 和 nginx 超时时间不一致,但是我设置成一样的也还是没用,后来又添加了多端口负载,依旧还是没用

我猜测是由用户访问服务,然后我同步更新了,导致了 502 把?求助各位大佬,有什么解决方案吗?


求助帖:Nodejs环境下 PM2 + Nginx 配置问题
11 回复

是 Node.js 部分启动慢吧


是的,有时候重启了一分钟,有时候很快,您知道为啥吗?如何解决

我猜是 NGINX keep alive ,然后连接复用继续请求你的 node 服务,但发现上游服务停了。
NGINX 配置 proxy_next_upstream 试试将请求转发到其他节点。

Docker 也可以 zero downtime deployment

启动多个 node 实例,nginx 负载均衡,不要同时启停所有 node 实例

这个法子我试过了。我起了 2 个端口做负载,但是实际有的用户已经在 1 上面了,会一直连接直到超时,然后就会 502

docker 确实解万愁

什么业务 启动这么慢

就是类似于抽奖的活动页面,我在想是不是并发太高了,导致 reload 会慢。

在Node.js环境下使用PM2和Nginx进行配置,通常是为了实现应用的负载均衡、高可用性和反向代理。以下是一个基本的配置示例,假设你的Node.js应用运行在本地服务器上的3000端口。

1. 使用PM2启动Node.js应用

首先,确保你的Node.js应用有一个app.js(或类似的入口文件)。然后,你可以使用PM2来启动它:

pm2 start app.js --name myapp --watch

这将启动你的应用,并给它命名为myapp,同时开启文件监视,以便在代码更改时自动重启。

2. 配置Nginx

接下来,配置Nginx来反向代理到PM2管理的Node.js应用。编辑你的Nginx配置文件(通常位于/etc/nginx/nginx.conf/etc/nginx/sites-available/default):

server {
    listen 80;
    server_name your_domain_or_ip;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

3. 重启Nginx

完成配置后,重启Nginx以使更改生效:

sudo systemctl restart nginx

现在,你的Node.js应用应该可以通过Nginx在80端口上访问了。确保你的防火墙和安全组规则允许从外部访问80端口。如果遇到任何问题,请检查Nginx和PM2的日志以获取更多信息。

回到顶部