nginx反向代理和负载均衡

10 篇文章 0 订阅

目录

代理

四层代理:

七层代理:

四层和七层的区别

反向代理的作用

反向代理如何实现以负载均衡的算法

负载均衡算法


代理

代理

  • 客户端通过一个指定的服务器,访问其他服务器,请求和响应都由指定服务器来为客户端进行处理。这个指定的服务器就是代理服务器。

  • vpn就是正向代理,当访问代理服务器时,客户端知道访问的是代理,代理服务器的地址请求。

正向代理:

  • 角色: 正向代理位于客户端和目标服务器之间,代表客户端向服务器发起请求。

  • 功能: 客户端通过正向代理向目标服务器发送请求,然后正向代理将请求转发给目标服务器,并将收到的响应返回给客户端。目标服务器不知道实际发起请求的客户端,因为请求似乎是由代理发起的。

  • 配置: 客户端需要进行特定的设置,指定正向代理的地址、端口等信息,以便请求通过代理服务器。

反向代理:

  • 角色: 反向代理位于目标服务器和客户端之间,代表服务器向客户端提供服务。

  • 功能: 客户端发送请求给反向代理,然后反向代理决定将请求转发给哪个目标服务器。客户端不知道实际提供服务的服务器,因为似乎所有的服务都来自于反向代理。

  • 配置: 客户端无需特别配置,只需将请求发送到反向代理,而反向代理负责将请求转发到实际提供服务的服务器。

总体来说,正向代理隐藏了客户端的身份,使得客户端似乎是通过代理向服务器发起请求;而反向代理隐藏了服务器的身份,使得客户端似乎是直接与代理通信而不知道实际提供服务的服务器。这两种代理的作用都是在请求和响应之间起到中间人的作用,但方向和目的不同。

四层代理:

  1. 工作层次: 四层代理主要工作于OSI模型的传输层(第四层)。

  2. 功能: 主要处理消息的传递,关注于IP地址和端口号的信息。四层代理通常只检查和操作网络数据包的目标IP地址和端口号,而不涉及应用层面的内容。

  3. 负载均衡: 四层负载均衡器主要针对由上游服务发送和接收的网络包,而不关心这些数据包中的具体内容。

  4. 性能: 由于操作较低层次的信息,通常在传输大量数据时,性能相对较高。

七层代理:

  1. 工作层次: 七层代理主要工作于OSI模型的应用层(第七层)。

  2. 功能: 主要用来处理消息内容,关注于应用层协议和数据内容。七层代理能够深入到应用层,检查和操作传输的数据的具体内容,例如HTTP报文、URL、Cookie等。

  3. 负载均衡: 七层负载均衡器不仅能够基于IP地址和端口号进行负载均衡,还可以根据应用层的内容信息进行智能的负载均衡,例如基于URL、Cookie等。

  4. 性能: 由于需要深入到应用层处理,性能相对较低,但提供了更高层次的灵活性和智能负载均衡的能力。

四层代理

  • 四层反向代理:四层就是传输层,tsp/ig协议进行代理转发。

  • 只能实现基于ipg和端口的负载均衡,四层代理无法获取http请求的url信息。只是对数据包转发。流量分发。

七层代理

  • 基于http协议的应用层代理,代理的是http的请求和响应

  • 客户端访问代理服务器,代理服务器接收客户端的http请求,然后由代理服务器请求转发到内部的一组服务器上进行处理,

  • 响应结果也由代理服务器返回给客户,在此过程中,客户端并不知晓自己访问的是代理服务器还是内部服务器,从而达到隐藏内部服务器的真实IP地址的目的

四层和七层的区别

工作层次:

  • 四层代理: 工作在OSI模型的传输层(第四层)。它主要关注IP地址和端口号的信息,负责数据包的转发和传输。

  • 七层代理: 工作在OSI模型的应用层(第七层)。它关注应用层协议和数据内容,能够深入到应用层处理传输的数据。

功能:

  • 四层代理: 主要处理网络数据包的目标IP地址和端口号,不深入关注数据包的具体内容。只负责转发数据,不涉及应用层面的内容解析。

  • 七层代理: 能够深入到应用层,检查和操作传输的数据的具体内容,例如HTTP报文、URL、Cookie等。提供更高级的功能,如内容过滤、应用层负载均衡等。

负载均衡:

  • 四层代理: 主要基于IP地址和端口号进行负载均衡。只考虑网络数据包的目标信息。

  • 七层代理: 不仅可以基于IP地址和端口号进行负载均衡,还可以根据应用层的内容信息进行智能的负载均衡,例如基于URL、Cookie等。

性能:

  • 四层代理: 四层只是转发数据包,走的是内核态。不负责处理http请求,也不对数据包做任何处理,速度快。

  • 七层代理: 对http的协议进行处理,走的是用户态,需要一系列的验证和处理流程,速度相对较慢。

应用场景:

  • 四层代理: 适用于需要处理大并发连接请求的场景,只是针对tcp或者udp流量的转发。

  • 七层代理: 适用于需要深度内容解析和智能负载均衡的场景,如Web应用负载均衡、内容过滤等。七层代理不适合高并发(硬件的条件可以一些场景的高并发),需要对http请求进行深入处理和控制的场景。

工作层次:

  • 四层代理: 工作在OSI模型的传输层(第四层)。它主要关注IP地址和端口号的信息,负责数据包的转发和传输。

  • 七层代理: 工作在OSI模型的应用层(第七层)。它关注应用层协议和数据内容,能够深入到应用层处理传输的数据。

功能:

  • 四层代理: 主要处理网络数据包的目标IP地址和端口号,不深入关注数据包的具体内容。只负责转发数据,不涉及应用层面的内容解析。

  • 七层代理: 能够深入到应用层,检查和操作传输的数据的具体内容,例如HTTP报文、URL、Cookie等。提供更高级的功能,如内容过滤、应用层负载均衡等。

负载均衡:

  • 四层代理: 主要基于IP地址和端口号进行负载均衡。只考虑网络数据包的目标信息。

  • 七层代理: 不仅可以基于IP地址和端口号进行负载均衡,还可以根据应用层的内容信息进行智能的负载均衡,例如基于URL、Cookie等。

性能:

  • 四层代理: 四层只是转发数据包,走的是内核态。不负责处理http请求,也不对数据包做任何处理,速度快。

  • 七层代理: 对http的协议进行处理,走的是用户态,需要一系列的验证和处理流程,速度相对较慢。

应用场景:

  • 四层代理: 适用于需要处理大并发连接请求的场景,只是针对tcp或者udp流量的转发。

  • 七层代理: 适用于需要深度内容解析和智能负载均衡的场景,如Web应用负载均衡、内容过滤等。七层代理不适合高并发(硬件的条件可以一些场景的高并发),需要对http请求进行深入处理和控制的场景。

反向代理的作用

  • 负载均衡: 反向代理可以分发客户端的请求到多个后端服务器上,以平衡服务器负载。这有助于提高系统的性能、可用性和稳定性。

  • 隐藏真实服务器: 反向代理可以隐藏后端服务器的真实地址和信息。客户端只与反向代理通信,而不直接与后端服务器建立连接,从而增加了系统的安全性。

  • 缓存: 反向代理可以缓存后端服务器返回的内容,以提高相同请求的响应速度。这对于减轻服务器负载和加速内容传输非常有用。例如会话保持

  • 安全性和访问控制: 反向代理可以实现安全功能,如身份验证、授权和防火墙规则。通过代理服务器,可以限制对后端服务器的直接访问,提高系统的安全性。

  • 简化架构: 反向代理可以将复杂的后端服务器架构对外呈现为单个入口点,简化了客户端与服务器之间的通信和管理。代理服务器和几台后端服务器。就可以形成一个逻辑服务,这个服务架构可以随时的进行弹性伸缩。

反向代理如何实现以负载均衡的算法

七层的模块:upstream只能定义在http的全局模块之中。四层代理: stream只能定义在全局模块当中。

在Nginx中配置反向代理相对简单,以下是一个基本的配置示例:

server {
    listen 80;
    server_name your_domain.com;

    location / {
        proxy_pass http://backend_server_ip:backend_server_port;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

这个配置假设你有一个运行在 backend_server_ip:backend_server_port 地址和端口的后端服务器。下面是一些配置的解释:

  • listen 80; 监听端口80,这是HTTP的默认端口。

  • server_name your_domain.com;your_domain.com 替换为你的域名。

location / 块内:

  • proxy_pass http://backend_server_ip:backend_server_port; 指定反向代理的目标地址。

  • proxy_set_header 配置项: 设置一些HTTP头,将原始客户端的信息传递给后端服务器。这些头信息可以用于获取客户端真实IP地址等。

保存配置文件后,使用 nginx -t 来测试配置文件是否有语法错误,然后使用 systemctl restart nginx 重启Nginx以使配置生效。

请确保将上述配置中的占位符替换为实际的值,

负载均衡算法

轮询(Round Robin): 这是默认的负载均衡算法。每个请求按时间顺序逐一分配到不同的后端服务器,确保每个服务器都有机会处理请求。

upstream backend {
    server backend1;
    server backend2;
    # 可以添加更多的后端服务器
    # ...
}

server {
    location / {
        proxy_pass http://backend;
    }
}

权重轮询(Weighted Round Robin): 为每个后端服务器分配一个权重值,权重值越高的服务器获得的请求越多。

upstream backend {
    server backend1 weight=3;
    server backend2 weight=2;
    # ...
}

server {
    location / {
        proxy_pass http://backend;
    }
}

最小连接数(Least Connections): 将请求发送到当前连接数最少的后端服务器。

upstream backend {
    least_conn;
    server backend1;
    server backend2;
    # ...
}

server {
    location / {
        proxy_pass http://backend;
    }
}

IP哈希(IP Hash): 根据客户端的IP地址将请求分配到后端服务器,确保同一客户端的请求一直发送到同一台服务器,有助于保持某些会话状态。

upstream backend {
    ip_hash;
    server backend1;
    server backend2;
    # ...
}

server {
    location / {
        proxy_pass http://backend;
    }
}

        客户端的ip地址计算出一个hash,然后将请求发送到后端服务器,同一个客户端的请求会被分配到上一次转发的服务器。这就是nginx实现会话保持的方式。

URL HASH

        根据客户端请求的URL计算一个HASH值,然后转发请求到后端服务器,如果每一次请求的url地址相同,都会分配到同一个服务器。请求地址发生变化,轮询的服务器也可能发生变化。

  1. 提取URL: Nginx从客户端请求中提取URL。

  2. 哈希计算: 使用一个哈希函数(如MD5、SHA-1、SHA-256等),将提取到的URL进行哈希计算,生成一个固定长度的哈希值。

  3. 映射到后端服务器: 将生成的哈希值映射到后端服务器列表的某个范围内。通常,这个映射是通过对哈希值取模运算来实现的,例如,如果有 N 台后端服务器,可以使用 hash_value % N 来决定将请求发送到哪个后端服务器。

  4. 请求转发: Nginx将请求转发到被确定的后端服务器。

    这种方法的优点在于相同的 URL 总是被分发到相同的后端服务器,从而确保了在一些场景下的会话一致性和缓存效果。

    在 Nginx 配置文件中,可以通过在 upstream 块中使用 hash 指令来配置 URL HASH 算法。例如:

upstream backend {
    hash $request_uri consistent;
    server backend1;
    server backend2;
    server backend3;
}

上述配置中,$request_uri 是指使用请求的 URI(即URL)进行哈希计算,consistent 用于在后端服务器发生变化时尽可能地保持一致性。

在负载均衡算法中,七层都可以使用,四层只能用加权轮循以及最小连接数

stream要写在整个配置的全局当中,而且stream只能是ip+端口。

  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值