tva
← Insights

叠加反向代理:一种生产架构

为什么叠加代理层

大多数生产架构教程展示的是一层反向代理——通常是 Nginx 或 Traefik——位于应用服务器前面。这对于单个应用或小型服务集群已经足够。

当你运营的是具有真实流量的多租户基础设施时,每一层承担的职责都不同,而这些职责不应混合在一起。

四层架构

从外到内:

Cloudflare 处理 DDoS 防护、WAF 规则、边缘缓存以及 SSL 终止。它不了解你的后端结构,也不需要了解。

Traefik 处理服务发现和路由。它监听 Docker 事件,并在容器启动和停止时自动重新配置路由规则。无需重载配置文件。

Varnish 处理 HTTP 加速和缓存。对于服务大量相同内容的应用,Varnish 可以在命中缓存时完全绕过应用层。

Nginx 处理最终的应用服务:静态文件、针对应用的缓存头,以及将动态请求代理给应用容器。

实际的请求路径

请求到达 Cloudflare 边缘,通过 WAF 规则过滤,在边缘缓存命中时提前返回。对于缓存未命中的请求,流量通过 Traefik 路由到正确的容器,Varnish 检查其缓存,Nginx 提供静态资源或将动态请求代理给应用。

这条路径听起来很长,但在实践中延迟是可以接受的。每一跳都是本地或低延迟操作,增加的时间通常在个位数毫秒级别。

运营收益

每一层都可以独立更新。更新 Nginx 配置不会影响 Traefik 的路由规则。更换 Varnish 缓存策略不需要触碰 Cloudflare 设置。各层的故障隔离意味着问题局限在更小的范围内。

这种架构什么时候不值得

如果你运行的是单个应用、单个服务器,这种方案是过度工程。Caddy 或带 Let's Encrypt 的 Nginx 完全够用。

当你需要独立扩展各层时,当你在同一基础设施上服务多个团队时,或者当某层的故障隔离比运维简单性更重要时,这种复杂性才是合理的。

相关洞见

相关文章