本页目录
反向代理与负载均衡
反向代理不只是"转发请求"——TLS 终结、缓存、压缩、限流、健康检查、蓝绿发布,现代架构的流量管理全集中在这一层。nginx/Caddy/HAProxy 的配置哲学各有不同。
概述
反向代理是服务器端的门面——它接收所有外部请求,做 TLS 终止、SNI 路由、限流和日志,将请求转发到后端服务。负载均衡器将请求按策略(轮询/最少连接/IP hash)分发到多个后端实例,提高可用性和吞吐。Caddy 以自动 TLS(ACME + Let's Encrypt 零配置)著称,nginx/HAProxy 以高性能和丰富的 L4/L7 功能主导企业环境。理解反向代理是部署任何互联网服务的前提。
反向代理 vs 正向代理
Caddy 配置
grafana.liz6.com {
reverse_proxy 127.0.0.1:3000 {
header_up Host {upstream_hostport}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
}
chat.liz6.com {
reverse_proxy 127.0.0.1:3001
}
反向代理的职责:
- TLS Termination: Caddy 做 TLS → 后端 HTTP → 后端不需要处理 TLS
- SNI Routing: 同一 port (443) 根据 SNI 路由到不同后端
- Request rewriting: 添加 X-Forwarded-*, 修改 path/headers
- Rate Limiting: per-client or per-endpoint rate limiting
- Access Log: 集中日志 (Caddy JSON access log)
L4 vs L7 Load Balancing
负载均衡算法
Round Robin: 逐 backend 轮询
Least Connections: 选 conns 最少的 backend (只对 L7 有效)
Random: 随机
IP Hash: 同一 client IP → 同一 backend → sticky
Consistent Hash: hash ring → backend 增减时只有 1/N 重新 hash
Weighted: backend 权重 → weight=3 多 3x 流量
Health Check:
passive: 从实际 request 的 failure 检测 (max_fails=N)
active: 定期 GET /health → 期望 200 → 标记为 down on failure
slow_start: backend 恢复后逐步增加流量 (避免 flood)
参考
- Caddy: caddyserver.com/docs/caddyfile/directives/reverse_proxy
- nginx: nginx.org/en/docs/http/ngx_http_upstream_module.html
- HAProxy: haproxy.org
Keywords: reverse proxy, SNI routing, L4/L7 LB, health check, sticky session, rate limiting, Caddy