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_pass、upstream、WebSocket Upgrade 头这三个核心点,基本能覆盖 80% 的日常场景。