部署 Node 应用与 Nginx 反向代理

更新于 2026年8月21日

适用人群:已守护好 Node 进程、要用 Nginx 反代对外提供服务的开发者。

核心概念

反向代理原理

Node 应用只监听本机端口(如 127.0.0.1:3000),不直接对公网开放。Nginx 监听 80/443,用 proxy_pass 把请求转给 Node,并用 proxy_set_header 透传 Host、X-Forwarded-For、X-Forwarded-Proto,让应用拿到真实域名、客户端 IP 和协议。

为什么这么做

这样 Nginx 统一处理 HTTPS、静态资源缓存、gzip、限流和安全头,Node 只专注应用逻辑,架构更清晰也更安全。

操作步骤

  1. 步骤 1确认应用监听端口

    确认 Node 应用监听 127.0.0.1:3000(或你设定的端口),仅本机可访问。

  2. 步骤 2写 Nginx 反代配置

    server 块里 location / 用 proxy_pass 指向 http://127.0.0.1:3000,并加 proxy_set_header 透传头。

  3. 步骤 3处理 WebSocket(如需)

    应用用到 WebSocket 时,加 proxy_http_version 1.1 与 Upgrade/Connection 头。

  4. 步骤 4重载 Nginx

    nginx -t 测试配置无误后 reload 生效。

  5. 步骤 5验证

    浏览器访问域名确认经 Nginx 能正常打开 Node 应用。

实际示例

server {
    listen 80;
    server_name example.com www.example.com;
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

常见错误

  • ⚠️漏了 proxy_set_header Host / X-Forwarded-*,应用拿不到真实域名和客户端 IP,导致重定向、日志、限流异常
  • ⚠️Node 直接监听 0.0.0.0 对公网开放,绕过了 Nginx 的 TLS 与防护
  • ⚠️WebSocket 应用没加 Upgrade/Connection 头,实时功能连不上
  • ⚠️改了 Nginx 配置没 nginx -t 直接 reload,语法错误导致服务异常

对应工具

常见问题

Node 应用为什么不直接对外?
让 Node 只监听本机、由 Nginx 反代对外,能统一做 HTTPS、缓存、限流和安全头,既安全又好维护。
反代后应用拿到的 IP 都是 127.0.0.1?
需要在 Nginx 加 X-Forwarded-For / X-Real-IP 透传,并在应用里信任代理头(如设置 trust proxy),才能拿到真实客户端 IP。

相关教程

相关文章

官方资料来源