Nginx-5 Nginx 的4层反向代理

Nginx-5 Nginx 的4层反向代理

Nginx 的4层反向代理即指在 OSI 传输层(TCP、UDP)提供的反向代理。

stream 模块处理请求的7个阶段

Nginx-5 Nginx 的4层反向代理_第1张图片

不过需要注意的是,这与 http 11个处理阶段的方式有所不同,4层反向代理中没有 http 中的概念,自然也无法通过 header 传递 IP 地址,以及通过 limit request 限制请求数。

因此,4层反向代理使用 proxy protocal 来传递 IP 地址。

realip

功能:通过 proxy_protocal 协议取出客户端真实地址,并写入 remote_addr 及 remote_port 变量,同时使用 reaiip_remote_addr 和 realip_remote_port 保留 TCP 连接中的对端地址和端口。

模块:ngx_stream_realip_module ,需要通过 --with 指令手动编译进 nginx。

Nginx-5 Nginx 的4层反向代理_第2张图片

Nginx-5 Nginx 的4层反向代理_第3张图片

Limit conn

功能:限制客户端并发连接数

limit_conn_zone key zone=name:size;

limit_conn zone number;

limit_conn_log_level info|notice|warn|error;

access

功能:根据客户端地址决定连接访问权限

allow 127.0.0.1;
deny all;

UDP 的反向代理

Nginx-5 Nginx 的4层反向代理_第4张图片

透传 IP 地址

目的:使上游服务拿到真实的客户端 IP

方法:

  • protocol 协议
  • 修改 IP 报文
    • IP 地址透传,仍由 nginx 转发给客户端
    • DSR,上游服务直接转发给客户端(仅UDP)

IP 地址透传

  • nginx 转发上游服务时修改源地址为客户端地址
  • 上游服务配置网关地址为 nginx
  • nginx 监听上游服务发的报文转发给真实的客户端 A

DSR 方案1

  • nginx 转发上游服务时修改源地址为客户端地址
  • 上游服务配置网关地址为 nginx
  • nginx 直接配置源地址为上游服务的报文修改源地址为本级地址后转发(借助 Linux 内核)

DSR 方案2

  • nginx 转发上游服务时修改源地址为客户端地址
  • 上游服务直接发送响应给对应客户端

DSR 方案会有这样的问题:

  • nginx 会检测不到上游服务是否回包,导致负载均衡策略(判断上游服务是否存活)受限

你可能感兴趣的:(#,Nginx,nginx,运维,IP地址透传,计算机网络)