附录 B:组件选型决策树
把全书的选型判断收成可操作的决策流程。每个分支都标注了对应章节。
一、代理类型选择(第01章)
我要解决什么问题?
├─ 让内网客户端统一出网/审计/缓存 ──────▶ 正向代理(Squid,第17章)
├─ 给服务端做门面/负载均衡/TLS 卸载 ────▶ 反向代理(Nginx/HAProxy/Envoy)
├─ 客户端零配置、内核劫持流量 ──────────▶ 透明代理(iptables/TPROXY,第11章)
├─ 通用隧道任意 TCP/UDP ────────────────▶ SOCKS5 / CONNECT 隧道(第06章)
└─ 内网服务暴露到公网 ──────────────────▶ 反向隧道穿透(frp/ssh -R,第19章)
二、L4 还是 L7(第02章/09/10)
需要看/改应用层内容吗(按 URL/Header 路由、改写、缓存)?
├─ 否,只是转发任意 TCP/要极致性能 ─────▶ L4(HAProxy tcp / LVS / socat)
│ └─ 要按域名分流 HTTPS 但不解密? ──▶ L4 + SNI 嗅探(ssl_preread,第02章)
└─ 是,要路由/改写/治理 ────────────────▶ L7(Nginx/Envoy/HAProxy http)
└─ 注意:gRPC/长连接负载不均 → 必须 L7 请求级(第09章陷阱)
三、TLS 处理方式(第05章)
代理要不要看 HTTPS 明文?
├─ 不要(保持端到端加密) ──▶ 透传(passthrough / SNI 路由)
├─ 要(反向代理,我持有证书) ──▶ TLS 终止(卸载)
│ └─ 内网也要加密? ──▶ 重加密(两段 TLS)
└─ 要(正向,我没有源站证书) ──▶ MITM(需客户端信任 CA;受 HSTS/锁定限制)
四、反向代理组件选型(第13-16章)
你的核心诉求?
├─ 通用/静态文件/成熟稳定 ──────────────▶ Nginx(第13章)
│ └─ 要 Lua 可编程 ──▶ OpenResty
├─ 专业负载均衡/强健康检查/限流 ────────▶ HAProxy(第14章)
├─ 云原生数据面/动态配置/gRPC/Mesh ─────▶ Envoy(第15章)
├─ 容器环境自动服务发现 ────────────────▶ Traefik(第16章)
└─ 个人站点/要自动 HTTPS ───────────────▶ Caddy(第16章)
五、正向/调试/穿透组件(第17-20章)
├─ 企业出网网关/缓存/审计 ──▶ Squid(第17章)
├─ 抓包改包调试 HTTPS ──────▶ mitmproxy(第18章)
├─ 内网穿透 ────────────────▶ frp(专业)/ ssh -R(临时)/ ngrok(SaaS)(第19章)
└─ 加密代理 + 分流 ─────────▶ Clash/sing-box(第20章,技术中立)
六、自己写代理用什么语言(第21-24章)
├─ 又要性能又要开发快/单体代理 ──▶ Go(Traefik/frp/Clash 都是)
├─ 极致性能 + 内存安全 + 长期运行 ──▶ Rust(pingora)
├─ 调试工具/原型/控制面/中低流量 ──▶ Python(mitmproxy)
└─ 性能极限/嵌入现有 C 生态 ────────▶ C/C++(Nginx/HAProxy/Envoy)
黄金律:数据面要快(C++/Rust/Go),控制面要开发快(Go/Python)(第24章)
七、Kubernetes 流量怎么治(第25-29章)
├─ Docker 拉镜像走代理 ──▶ daemon 代理(systemd drop-in,第25章)
├─ 外部→集群(南北流量)──▶ Ingress / Gateway API(第27章)
├─ 服务间(东西流量)──────▶ Service Mesh / Envoy sidecar(第26/29章)
├─ 集群→外部(出网治理)──▶
│ ├─ 按 IP 限制 ──▶ NetworkPolicy
│ ├─ 按域名 ──────▶ Cilium FQDN / Istio ServiceEntry
│ ├─ 审计+缓存 ────▶ 集群内 Squid 正向代理
│ └─ 固定出口 IP ──▶ Egress Gateway + SNAT(第28章)
└─ 要不要 sidecar? ──▶ 省资源用 Ambient(ztunnel+waypoint,第26章)
八、常见场景 → 推荐方案速查
| 场景 | 推荐 | 章 |
|---|---|---|
| 网站前置反代 + TLS 卸载 | Nginx / Caddy | 13/16 |
| 数据库/TCP 负载均衡 | HAProxy mode tcp / LVS | 14/09 |
| 微服务东西流量治理 | Istio + Envoy | 29 |
| K8s 集群入口 | Ingress-nginx / Gateway API | 27 |
| 企业统一出网审计 | Squid 正向代理 | 17 |
| 调 API / 抓移动端 | mitmproxy | 18 |
| 把开发机服务给外部看 | ngrok / frp | 19 |
| 高吞吐自研网关 | Envoy / 自写 Rust | 15/22 |