# 反向代理 Node.js 应用

URL: https://caijiao.org/nginx/node-proxy
Source: docs/nginx/node-proxy.md
Description: 本节介绍 Nginx 反向代理 Node.js 应用的方法，包括 upstream 配置、负载均衡、请求转发、WebSocket 支持及性能优化。

Nginx 常用于反向代理 Node.js 应用，实现请求转发、负载均衡和安全控制。

## 一、基本反向代理配置

```nginx
upstream node_app {
    server 127.0.0.1:3000;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://node_app;
        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;
    }
}
````

* **upstream**：定义后端 Node.js 服务
* **proxy_pass**：请求转发到 Node.js
* 支持 **WebSocket**，通过 `Upgrade` 和 `Connection` 设置

## 二、负载均衡

```nginx
upstream node_app {
    least_conn;
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
}
```

* **least_conn**：将请求分配给连接数最少的后端，提高负载均衡效果
* 可根据需求选择 `round-robin` 或 `ip_hash`

## 三、性能优化

1. 开启缓存和 Gzip 压缩，提高响应速度
2. 配置 `proxy_buffers` 和 `proxy_timeout`，优化大请求传输
3. 结合负载均衡和健康检查，提高高可用性

## 四、安全建议

1. 配置 HTTPS，保障传输安全
2. 限制请求速率和访问控制，防止恶意请求
3. 独立日志记录 Node.js 请求，便于调试和监控

---

通过 Nginx 反向代理 Node.js 应用，可以实现高性能、高可用的 Web 服务架构，同时支持负载均衡和安全控制。
