网络 / 后端
我一开始以为七层代理是套了七层 CDN
最近看到了腾讯的 EdgeOne,简称 EO。
我对这种产品有兴趣,不是因为第一次看到“一站式”这几个字。Cloudflare 我已经用过了,DNS、CDN、安全、证书、规则配置都放在一个地方,确实很好用。自己折腾站点的时候,少开几个控制台,少对几遍配置,出了问题少猜一层,这个体验差别很明显。
EO 真正让我多看两眼的点在于:它是腾讯云的。国内站点要备案,腾讯云这边的链路更顺;COS、云函数、证书、DNS、CDN、安全这些东西也更容易和腾讯云全家桶打通。而我现在基本上很多东西都放在腾讯云上,所以如果它能做出接近 Cloudflare 的一站式体验,对我来说就很现实。
然后我在 EO 里面看到了一个词:七层代理。
我第一反应很离谱:
七层代理?这是套了七层 CDN 吗?
当时脑子里真的差不多是这个画面:
用户 -> CDN1 -> CDN2 -> CDN3 -> CDN4 -> CDN5 -> CDN6 -> CDN7 -> 源站 这就很尴尬。
后来才发现,这里的“七层”不是数量,不是代理套了七层,也不是 CDN 套娃。它说的是 OSI Model 的第七层。
不是七个 CDN
先把这个误会拆掉。
“七层代理”里的七层,指的是 Layer 7,也就是应用层。它不是有七层代理节点,而是这个代理工作在第七层,能理解应用层协议。
比如 HTTP 请求长这样:
GET /posts/123 HTTP/1.1
Host: acghub.net
User-Agent: Chrome 七层代理能看懂这些东西,所以它能按路径、域名、Header、Cookie 去做转发规则。
比如:
location /api {
proxy_pass http://api-server;
}
location /assets {
proxy_pass http://static-server;
} 这就是七层代理做的事:它不是只转发一个连接,而是理解 HTTP 语义之后再决定怎么处理请求。
OSI Model 到底在说什么
我之前看 Hussein 的视频也看到 OSI Model,但说实话,一开始是一知半解。
OSI 七层大概是这样:
| 层级 | 名字 | 大概在管什么 |
|---|---|---|
| L7 | 应用层 | HTTP、DNS、SMTP 这类应用协议 |
| L6 | 表示层 | 编码、压缩、加密这类表示问题 |
| L5 | 会话层 | 会话建立、维持、恢复 |
| L4 | 传输层 | TCP、UDP,端到端传输 |
| L3 | 网络层 | IP,路由,跨网络转发 |
| L2 | 数据链路层 | MAC,以太网,同一链路内传输 |
| L1 | 物理层 | 网线、光纤、电信号 |
如果只是背这个表,其实没什么用。背完也还是不知道七层代理和自己写后端有什么关系。
真正有用的是把它和日常看到的东西对上。
flowchart TD
A["浏览器发起 HTTPS 请求"] --> B["EO / Cloudflare 边缘节点"]
B --> C{"七层规则"}
C -->|"Host = acghub.net"| D["站点源站"]
C -->|"Path 以 /api 开头"| E["API 服务"]
C -->|"静态资源"| F["缓存 / CDN"] 这张图里,EO 或 Cloudflare 之所以能按 Host、Path、Header 做判断,就是因为它站在应用层看请求。它不是只看到一个 TCP 连接,而是能看到 HTTP 里面的内容。
四层代理和七层代理差在哪
搞懂七层代理以后,四层代理也顺手明白了。
四层代理工作在传输层,也就是 TCP/UDP 这一层。它关心的是:
源 IP
目标 IP
源端口
目标端口
TCP 还是 UDP 它不知道你访问的是:
/posts/123
/api/login
/admin 因为这些是 HTTP 里的内容,已经是应用层了。
所以四层代理更像是:
这个 TCP 连接来了,转给后面的某台机器。 七层代理则更像是:
这个 HTTP 请求来了,我先看 Host、Path、Header,再决定转给谁。 这两个不是谁高级谁低级的问题,而是工作的位置不一样。
四层代理通常更轻,性能好,适合做 TCP/UDP 级别的转发。七层代理更聪明,能做更细的规则,但也要解析协议,成本自然更高一点。
CDN、WAF、反代其实经常叠在一起
我一开始会把“七层代理”理解成“七层 CDN”,本质上是因为现在这些边缘平台把太多东西打包在一起了。
以 EO 或 Cloudflare 这种产品为例,它可能同时在做:
- DNS 解析;
- CDN 缓存;
- HTTPS 证书;
- WAF 防护;
- Bot 识别;
- 反向代理;
- 边缘规则;
- 源站回源。
于是看起来就像一个超级入口。你把域名接过去,用户所有流量先到它,再由它决定缓存、拦截、回源、改 Header、走哪个源站。
但这里要分清楚:
CDN:重点是缓存和就近访问
WAF:重点是安全检测和拦截
反向代理:重点是代表源站接收请求再转发
七层代理:重点是理解 HTTP 等应用层协议 它们可以出现在同一个产品里,但概念不是一回事。
这也是我这次最大的收获:不要看到一个控制台里放在一起,就把概念也揉成一团。
TLS 又算哪一层
这里还有一个容易卡住的点:HTTPS 里的 TLS 到底算哪一层?
如果硬按 OSI 说,TLS 很容易被放到表示层,因为它负责加密和表示。但真实工程里大家更多按 TCP/IP 模型讨论:
HTTP
TLS
TCP
IP
以太网 也就是说,HTTP 跑在 TLS 上,TLS 跑在 TCP 上,TCP 再跑在 IP 上。
这比死背“第几层”更有用。
所以我现在更倾向于这样记:
HTTP 关心请求语义
TLS 关心加密通道
TCP 关心可靠传输
IP 关心路由转发
链路层关心同一段网络怎么发出去 这套顺序想明白以后,再回头看 OSI 七层,就不会那么抽象了。
为什么这个东西对后端也重要
以前我会觉得 OSI Model 离后端很远,好像是网络工程师才需要背的东西。
但现在发现不是。
比如你部署一个后端服务,经常会碰到这些问题:
- 为什么 Nginx 能按
/api转发? - 为什么 TCP 负载均衡不能按 URL 分流?
- 为什么 CDN 能缓存静态资源,但动态接口要小心?
- 为什么源站拿到的 IP 可能是代理节点 IP?
- 为什么要看
X-Forwarded-For或CF-Connecting-IP? - 为什么 WebSocket、gRPC、HTTP/2、QUIC 会影响网关选型?
这些问题背后其实都绕不开“它工作在哪一层”。
七层代理能看 HTTP,所以它能改 Header、做路由、做 WAF、做缓存规则。四层代理只看连接,所以它更像是把流量按 IP 和端口分过去。
这不是考试知识点,是部署的时候真的会碰到。
最后
这次最有意思的地方,不是我学会了 OSI 七层每一层叫什么。
而是我意识到:很多技术名词听起来很吓人,其实只是我还没把它放到正确的地图上。
“七层代理”这个词,一开始我以为是七层 CDN 套娃。后来才知道,它只是说这个代理站在应用层,能看懂 HTTP。
这样一来,EO、Cloudflare、Nginx、反向代理、CDN、WAF 这些东西突然就没那么乱了。它们不是一堆互相覆盖的黑盒,而是分别站在不同位置,处理不同层次的问题。
以后再看到类似的词,我大概会先问自己一句:
它到底工作在哪一层?它到底看得见什么?
能回答这两个问题,很多网络概念就没那么玄学了。