Nginx 反向代理配置详解

Nginx 是一款高性能的 HTTP 和反向代理服务器,几乎是后端架构的标配。本文记录常用的反向代理配置。

最简单的反向代理

将所有请求转发到后端应用服务器:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        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_pass:后端地址
  • proxy_set_header Host:传递原始域名
  • X-Real-IP / X-Forwarded-For:让后端拿到真实客户端 IP

负载均衡

upstream 块定义后端池:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
upstream backend {
    least_conn;
    server 10.0.0.1:3000 weight=3;
    server 10.0.0.2:3000 weight=2;
    server 10.0.0.3:3000;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

常用策略:

  • 默认轮询:请求依次分配
  • weight=:权重越大分到的越多
  • least_conn:连接数最少的优先
  • ip_hash:同一客户端固定到同一后端

WebSocket 代理

Nginx 默认不支持 WebSocket 转发,需要显式声明 Upgrade 头:

1
2
3
4
5
6
location /ws {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

HTTPS 终结

让 Nginx 处理 HTTPS,后端走明文 HTTP(仅内网用):

1
2
3
4
5
6
7
8
9
server {
    listen 443 ssl;
    ssl_certificate     /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

小结

Nginx 的反向代理功能强大,配置简洁,是后端架构中不可或缺的组件。掌握 proxy_passupstream、WebSocket Upgrade 头这三个核心点,基本能覆盖 80% 的日常场景。

使用 Hugo 构建
主题 StackJimmy 设计