反向代理是 Nginx 最强大的功能之一:客户端访问 Nginx,Nginx 再把请求转发给后端真实服务。它能隐藏后端、统一入口、做负载均衡。
一、最简单的反向代理
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:8080; # 转发到本地 8080
}
}
二、传递真实信息
默认后端拿到的 IP 是 Nginx 的,要加上这几行让后端知道真实客户端:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
三、负载均衡:多实例分流
假设后端跑了 3 个实例(8080/8081/8082),用 upstream 统一管理:
upstream backend {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
server {
location / {
proxy_pass http://backend; # 自动轮询分发
}
}
四、负载均衡策略
- 轮询(默认):依次分发
- 权重:
server 127.0.0.1:8080 weight=3; - ip_hash:同一 IP 固定到同一后端(保会话)
- 最少连接:
least_conn;分发给最闲的实例
反向代理 + 负载均衡是无状态服务横向扩展的基础。加机器就能加容量,是高并发的核心手段。
五、健康检查
Nginx 默认会在某实例失败时自动剔除。可用 max_fails、fail_timeout 调节敏感度:
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
六、小结
反向代理是后端架构的枢纽。掌握它,你就具备了设计中小型服务架构的能力。后续可进一步学习 Nginx 的缓存、限流等高级特性。