Nginx反向代理Node.js应用需稳固实现请求转发、连接管理、安全透传和后端调度四大功能:通过proxy_pass转发请求,设置X-Real-IP等头透传真实IP,启用HTTP/1.1及upgrade支持WebSocket,配置超时参数防中断;结合upstream实现多实例负载均衡;利用location规则动静分离;并完成SSL终止、限流、错误页接管等生产加固。

Nginx 反向代理 Node.js 应用,不是加几行配置就完事的事。它真正起作用,靠的是把请求转发、连接管理、安全透传和后端调度这四件事做稳了。Node.js 本身单线程、高并发但易受阻塞影响,直接暴露在公网风险大、扩展难、静态资源处理低效——Nginx 正好补上这些短板。
基础反向代理:让 Node.js 安全“藏”起来
Node.js 应用(比如 Express)通常监听 localhost:3000,不能也不该直接对外提供服务。Nginx 要做的第一件事,就是当好这道“门卫”:
- 用
proxy_pass http://127.0.0.1:3000;把所有请求转给本地 Node 进程 - 必须设置
proxy_set_header X-Real-IP $remote_addr;和X-Forwarded-For,否则后端拿不到真实用户 IP - 加上
proxy_http_version 1.1;和Connection 'upgrade',否则 WebSocket(如 Socket.IO)会断连 - 超时参数不能省:
proxy_connect_timeout 60s;、proxy_read_timeout 120s;,避免长请求被误杀
多实例负载均衡:突破单进程瓶颈
一个 Node.js 进程跑不满 CPU,4 核机器上常只用 25% 左右资源。启动多个实例并由 Nginx 分流,是性价比最高的扩容方式:
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
- 用 PM2 启动集群:
pm2 start app.js -i max(自动匹配 CPU 核数) - 或手动启多个端口:
node app.js --port 3001、--port 3002等 - Nginx 配置
upstream块定义后端组,再在location /中引用:
upstream node_backend {
server 127.0.0.1:3001;
server 127.0.0.1:3002;
server 127.0.0.1:3003;
} - 默认轮询已够用;若实例性能不均,可加
weight=2等权重调节
动静分离:让 Nginx 干它最擅长的活
Node.js 处理 HTML、JS、CSS、图片这类静态文件效率远低于 Nginx。混在一起不仅拖慢响应,还浪费事件循环资源:
- 把前端构建产物(如
/dist)放到 Nginx 的root目录下,例如/var/www/myapp - 用
location /static/或location ~* \.(js|css|png|jpg|gif)$规则,让 Nginx 直接返回文件 - 搭配
expires 30d;设置强缓存,减少重复请求 - 动态 API 请求(如
/api/)仍走proxy_pass到 Node 实例
生产必备加固项
上线前漏掉这几条,轻则 502 错误频发,重则被扫描攻击打穿:
- SSL 终止:在 Nginx 层统一配 HTTPS,后端走 HTTP 内网通信,简化 Node 安全配置
-
限流防刷:用
limit_req控制单 IP 请求频率,保护后端不被压垮 -
错误页接管:配置
error_page 502 503 504 /50x.html;,避免用户看到裸错 - 日志分级:单独记录反向代理访问日志,方便排查是 Nginx 问题还是 Node 崩溃

















