反向代理是接收客户端的请求,转发给后方 1 台以上的服务器并返回响应的中间服务器。客户端只与反向代理通信,意识不到后方服务器的存在。Nginx、HAProxy、Envoy 等是具有代表性的实现。RFC 9110 将网关(又称反向代理)定义为:对外向连接作为源服务器行事,并将收到的请求转换后转发给内侧 1 台以上服务器的中介。
反向代理的主要功能如下。第一是 SSL/TLS 终止,将加密 / 解密处理集中到代理,减轻后端的负载。第二是负载均衡,将请求分配给多台后端服务器,提高可用性。第三是缓存,保存静态内容和频繁访问的响应,减少发往后端的请求。第四是安全,隐藏后端服务器的 IP 地址,并实现 WAF 功能和 DDoS 防护。
在短链接服务架构中,也会使用反向代理。为处理大量重定向请求,用 Nginx 接收请求,在缓存层保存常用短链接的重定向目标,仅在缓存未命中时查询后端数据库,这样的构成就是一个例子。
反向代理设置中需要注意的是对 X-Forwarded-For 头部的正确处理。短链接服务要记录点击来源的 IP 地址,因此需要设置让代理把客户端的真实 IP 传给后端。MDN 提醒,除可信代理添加的地址外,X-Forwarded-For 中的 IP 地址可能是伪造的(截至 2025 年 7 月)。此外,支持 HTTP/2 和 HTTP/3、连接的 keep-alive 设置、超时值的调整等高流量环境下的调优,也关系到性能。