插件窝 干货文章 Nginx做NodeJS应用负载均衡配置的方法

Nginx做NodeJS应用负载均衡配置的方法

server Nginx proxy 477    来源:    2025-04-22

Nginx 配置 Node.js 应用负载均衡指南

基本负载均衡配置

以下是一个基本的 Nginx 配置,用于在多个 Node.js 实例之间分配负载:

http {
    upstream nodejs_servers {
        server 127.0.0.1:3000;
        server 127.0.0.1:3001;
        server 127.0.0.1:3002;
    }

    server {
        listen 80;
        server_name yourdomain.com;

        location / {
            proxy_pass http://nodejs_servers;
            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;
        }
    }
}

负载均衡策略

Nginx 支持多种负载均衡策略:

1. 轮询(默认)

upstream nodejs_servers {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
}

2. 加权轮询

upstream nodejs_servers {
    server 127.0.0.1:3000 weight=3;
    server 127.0.0.1:3001 weight=1;
}

3. IP 哈希(保持会话)

upstream nodejs_servers {
    ip_hash;
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
}

4. 最少连接

upstream nodejs_servers {
    least_conn;
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
}

高级配置选项

健康检查

upstream nodejs_servers {
    server 127.0.0.1:3000 max_fails=3 fail_timeout=30s;
    server 127.0.0.1:3001 max_fails=3 fail_timeout=30s;
}

保持长连接

upstream nodejs_servers {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    keepalive 32;
}

WebSocket 支持

location / {
    proxy_pass http://nodejs_servers;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
}

HTTPS 配置

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://nodejs_servers;
        # 其他代理设置...
    }
}

server {
    listen 80;
    server_name yourdomain.com;
    return 301 https://$host$request_uri;
}

最佳实践建议

  1. 使用 PM2 管理 Node.js 进程

    pm2 start app.js -i max
    
  2. 调整 Nginx 缓冲区大小

    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;
    
  3. 启用 Gzip 压缩

    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
  4. 静态文件服务

    location /static/ {
       root /path/to/static/files;
       expires 30d;
    }
    
  5. 日志记录

    access_log /var/log/nginx/nodejs.access.log;
    error_log /var/log/nginx/nodejs.error.log;
    

配置完成后,记得测试并重新加载 Nginx:

sudo nginx -t
sudo systemctl reload nginx