插件窝 干货文章 如何优化Nginx和Node.js

如何优化Nginx和Node.js

优化 Nginx proxy http 721    来源:    2025-04-21

优化Nginx和Node.js的协同工作需要从Web服务器配置、应用性能、资源管理等多方面入手。以下是分步骤的详细优化方案:


一、Nginx 优化

1. 基础配置优化

worker_processes auto;  # 自动匹配CPU核心数
worker_connections 1024;  # 每个worker的最大连接数
keepalive_timeout 65;  # 保持长连接减少重建开销
gzip on;  # 启用Gzip压缩静态资源
access_log off;  # 生产环境可关闭日志提升性能(或设为缓冲模式)

2. 静态资源缓存

location ~* \.(jpg|css|js|png)$ {
    expires 365d;  # 长期缓存
    add_header Cache-Control "public";
}

3. 反向代理优化

location / {
    proxy_pass http://nodejs_app;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_set_header X-Real-IP $remote_addr;
    proxy_buffer_size 16k;  # 缓冲区优化
    proxy_buffers 4 32k;
}

4. 负载均衡(多Node实例)

upstream nodejs_app {
    least_conn;  # 最少连接算法
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    keepalive 64;  # 复用TCP连接
}

二、Node.js 优化

1. 应用层优化

  • 使用Cluster模块:利用多核CPU。

    const cluster = require('cluster');
    if (cluster.isMaster) {
    for (let i = 0; i < require('os').cpus().length; i++) {
      cluster.fork();
    }
    } else {
    require('./app');
    }
    
  • 避免阻塞主线程

    • async/await处理I/O操作。
    • 将CPU密集型任务交给Worker Threads。

2. 性能工具

  • PM2管理进程

    pm2 start app.js -i max  # 根据CPU核心数启动实例
    pm2 save && pm2 startup  # 持久化进程
    
  • 性能分析

    node --inspect app.js  # 使用Chrome DevTools分析
    

3. 内存与GC优化

  • 增加Node内存限制: bash node --max-old-space-size=4096 app.js # 4GB内存
  • 监控内存泄漏:
    • 使用heapdumpclinic.js工具。

三、联合优化策略

  1. Nginx缓冲请求

    • 减轻Node.js的瞬时流量压力: nginx proxy_buffering on; proxy_buffer_size 8k;
  2. WebSocket优化

    location /socket.io {
       proxy_pass http://nodejs_app;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
    }
    
  3. HTTP/2支持

    • 在Nginx中启用HTTP/2提升多路复用效率: nginx listen 443 ssl http2;

四、监控与调优

  1. 实时监控工具

    • Nginx:ngxtopGoAccess(日志分析)。
    • Node.js:pm2 monitNew Relic
  2. 压力测试

    ab -n 10000 -c 100 https://yoursite.com/  # Apache Benchmark
    
  3. 内核参数调优(Linux)

    echo "net.core.somaxconn=65535" >> /etc/sysctl.conf
    sysctl -p
    

五、安全优化

  • Nginx
    • 禁用不必要的HTTP方法:limit_except GET POST { deny all; }
    • 配置SSL/TLS(如Let's Encrypt)。
  • Node.js
    • 使用helmet中间件加固HTTP头。
    • 限制请求体大小(如express.json({ limit: '10kb' }))。

通过以上步骤,可显著提升Nginx和Node.js的性能与稳定性。建议根据实际业务场景逐步测试调整参数,并持续监控关键指标(如QPS、延迟、内存使用率)。