以下是一个基本的 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 支持多种负载均衡策略:
upstream nodejs_servers {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
}
upstream nodejs_servers {
server 127.0.0.1:3000 weight=3;
server 127.0.0.1:3001 weight=1;
}
upstream nodejs_servers {
ip_hash;
server 127.0.0.1:3000;
server 127.0.0.1:3001;
}
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;
}
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;
}
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;
}
使用 PM2 管理 Node.js 进程:
pm2 start app.js -i max
调整 Nginx 缓冲区大小:
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
启用 Gzip 压缩:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
静态文件服务:
location /static/ {
root /path/to/static/files;
expires 30d;
}
日志记录:
access_log /var/log/nginx/nodejs.access.log;
error_log /var/log/nginx/nodejs.error.log;
配置完成后,记得测试并重新加载 Nginx:
sudo nginx -t
sudo systemctl reload nginx