nginx 为 node.js 做反向代理的核心是基于域名、路径或协议特征精准分发请求,实现路由解耦与运维弹性;需配置域名绑定、真实ip透传、websocket支持、动静分离、https终止及安全头设置。

用 Nginx 为 Node.js 做反向代理,核心不是“转发一个端口”,而是通过路径、域名或协议特征把请求精准分发到不同服务,实现真正的路由解耦和运维弹性。关键在于配置逻辑清晰、透传信息完整、兼顾安全与性能。
基于域名的多服务路由分发
适合多个独立 Node.js 应用共用同一台服务器,比如 admin.example.com 对应管理后台,api.example.com 对应 REST 接口服务。
每个 server 块绑定唯一域名,proxy_pass 指向对应本地端口:
-
确保 Node.js 服务监听在回环地址:如
127.0.0.1:4000(不暴露给外网) -
透传真实客户端信息:必须设置
X-Real-IP、X-Forwarded-For和X-Forwarded-Proto,否则后端日志和 HTTPS 判断会出错 -
支持 WebSocket:若应用含实时通信(如聊天、通知),需保留
Upgrade和Connection头
基于路径前缀的 API 路由拆分
适用于单体 Node.js 项目中按业务模块拆分服务,例如 /user → 用户服务,/order → 订单服务,后端可部署为多个独立进程。
利用 location 匹配路径前缀,配合 upstream 定义服务组:
诊断并恢复通过 SSH 隧道连接的 OpenClaw 节点。用于解决配对必需错误、隧道冲突、远程端点错误以及 SSH 目标配置错误等问题。
- 用
location /user/匹配带斜杠的路径,避免误匹配/users - 使用
proxy_pass http://user_backend/;(结尾带/)自动剥离前缀,无需pathRewrite - 定义
upstream user_backend { server 127.0.0.1:5001; },便于后续扩展多实例
动静分离 + 后端代理协同
静态资源(HTML/CSS/JS/图片)由 Nginx 直接响应,动态请求才交由 Node.js。这能显著降低 Node.js 的 I/O 压力,提升首屏速度。
典型配置结构:
- 根
location /先尝试找静态文件:try_files $uri $uri/ @nodejs; - 未命中时跳转到命名 location
@nodejs,再由它执行proxy_pass - 对
.js、.css等资源启用强缓存(Cache-Control: public, max-age=31536000)
HTTPS 终止与证书统一管理
让 Nginx 处理 SSL 解密,Node.js 专注业务逻辑。这样既节省 Node.js 的 CPU 开销,又便于证书更新和 HSTS 配置。
关键操作:
- 监听
443端口,加载ssl_certificate和ssl_certificate_key - 在
proxy_set_header X-Forwarded-Proto https;,确保后端能正确生成绝对 URL - 添加
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;










