四层和七层反向代理

2,233 阅读3分钟

前言

最近在做项目的时候,使用到了 WebSocket 方式与后端交互,在本地与测试环境尝试了采用了 nginx 对 ws 请求的拦截代理,是可行的。

但在上线的时候,nginx 却未能拦截下来进行代理,了解后,原来是运维在线上进行了一个七层反向代理,因为线上对外 IP 并不是真实服务器地址,并且做了多级的负载均衡等等,导致了内部转发服务器的 nginx 未能拦截 ws 请求,在此做了一个小记录~

问题

  • 代理是什么?
  • 反向代理是什么?
  • 四层和七层代表的是什么?
  • 什么是四层反向代理?
  • 什么是七层反向代理?

代理是什么?

  • 场景:访问用户通过proxy请求被访问的真实服务器
  • 路径:用户 -> proxy -> real-server

[proxy] 代表 [访问用户],此时 proxy 是代理。

例如:

在家访问 xx 网站,不希望 xx 网站 trace 到我们的真实 ip,于是就找一个 proxy,通过 proxy 来访问,此时 proxy 代表用户,网站以为 proxy 的 ip 就是用户的 ip。 反向代理是什么?

[proxy] 代表 [被访问的服务器],此时 proxy 是反向代理。

例如:

web-server 希望对用户屏蔽高可用、屏蔽 web-server 扩展、web-server 内网 ip 等细节,于是就找了一个 proxy 隔在中间,此时 proxy 代表 web-server 集群,用户以为 proxy 的 ip 就是被访问 web-server 的 ip(web-server 是集群,具体访问了哪个 web-server,用户不知道),由于 web-server 集群有多台,此时反向代理服务器要具备负载均衡的功能。

一般怎么做反向代理,负载均衡?

做反向代理可以有:nginx/apache,lvs,F5

什么是四层\七层代理?

这个是来源于 OSI 七层模型

大学“计算机网络”课程,之前都是用这个七层模型,新版教程用TCP/IP五层模型,这两个模型如下:

OSI七层模型

TCP/IP五层模型

image

每层之间的具象:

image

image

可以看到,四层是指传输层,七层是指应用层。

更具体的,对应到nginx反向代理hash:

  • 四层:根据 用户 ip + port 来做hash
  • 七层:根据 http 协议 中的某些属性来做hash

上面有四层,七层,那有没有二层,三层呢?

答:是有的

  • 二层:根据数据链路层 MAC 地址 完成数据交换
  • 三层:根据网络层 IP 地址 完成数据交换

参考文献