nginx的正向代理、反向代理、负载均衡

news/2024/7/9 23:37:27 标签: nginx, 负载均衡, 运维

nginx中有两种代理方式:

七层代理(仅限于http协议)

七层代理:代理的是http的请求和响应【核心】

客户端请求代理服务器,由代理服务器转发客户端的http请求,转发到内部的服务器(单台或一组),后端webserver再把响应送达代理服务器,最后再到客户端

反向代理:客户端访问的是代理服务器,代理服务器转发HTTP请求,但是客户端不知道访问的是哪一台服务器

正向代理:客户端也是访问代理服务器,代理服务器转发请求,客户端只代理服务器的地址,后端的webserver的IP地址,后端的webserver的IP地址客户也不知道

 

四层代理(基于tcp或udp流量转发)【基于IP和端口号实现负载均衡,或者正向代理】【无法获取HTTP请求中的URL信息,只能对tcp/udp的数据包进行转发】

 

 

 

Q:四层代理和七层代理之间的区别

A:

1、七层代理走的是用户态,需要对HTTP的请求进行处理和解析,解析过程中可以根据请求请求头和请求体的内容进行流量控制、内容过滤等,转发速度相对较慢,用户体验更好

    四层代理是基于IP地址和端口号,只负责将IP和端口转到后端服务器,不对请求做任何处理,只是负责转发而已。而且四层走的是内核,所以四层转发速度相对较快,用户体验较差。四层代理无法提供更高级的功能,只是转发

2、选择场景

七层代理:需要对HTTP请求进行控制和处理,只能选择七层代理(最常见的代理方式)

四层代理:只需要转发TCP/UDP的数据包,可以选择四层,也可以选择七层。(七层可以对IP和端口进行转发,也可以对域名进行代理;四层只能是IP和端口。负载均衡算法:有些是无法在四层代理使用的)

3、模块

七层代理只能写在HTTP模块的全局配置中

upstream:用于处理HTTP请求,支持反向代理、负载均衡、缓存功能。在uostream模块中,可以配置多个服务器

四层代理的模块:

stream:只能写在全局模块中的单独配置。stream代理无谓协议,只管流量

 

 

正向代理:(类似于vpn,科学上网,加速器)

企业架构都是反向代理服务器访问,但是后端有多台

 

七层代理:

http全局配置

uostream test{

 

  server 192.222.222.100;

  server 192.222.222.200;

 

}

 

location{

 

  proxy_pass http://test;

 

}

 

负载均衡算法:

1、rr (round robin)(负载均衡最简单的算法,轮询。请求轮流分配到后端服务器)

默认算法,可以不加

默认算法,每发起一次都是新的请求,服务器上没有缓存

处理器处理能力相近,而且,对访问量比较小的网站适用

 

2、加权轮询weight(常见)

建立在默认轮询算法之上。为后端服务器分配不同的权重,处理能力强的服务器可以分配的权重高一些。轮询次数基本是按照权重进行分配的。服务器上也没有缓存。中大型网站可以使用加权轮询

权重高的服务器会被频繁的请求响应。权重低的可能闲置。会和另外一种算法配合使用

 

3、最少连接数算法(会把请求发送到连接数量较少的后端服务器)

可以单独使用,但是一般都是结合加权轮询一起使用,避免所有的请求都发送到处理能力强的服务器。提高整个集群的稳定性。

中型网站、大型网站日常访问可以满足

 

4、ip_hash

根据客户端的怕地址解析出一个hash值,,然后将请求发送到对应的后端服务器,下一次用户再访问时,同意客户端的请求将会被分配到同一台服务器。

ip_hash第一次访问之后,后续访问是有缓存的。如果后端服务器的数量发生变化,可能会进行重新分配。

ip_hash适用于高并发。请求不会跳转,请求的是缓存

 

5、url算法(又叫url_hash)

根据请求的url地址计算hash值,然后将请求发送到相应的后端服务器。相同的url地址请求会被分配到同一个服务器。

 

url_hash和ip_hashhi结合在一起使用的,可以适用于并发较高的场景,只要是ip_hash和url_hash,访问之后第二次都是访问的缓存。可以降低后端服务器的压力

 

基于域名反向代理:

upstream 123{

 

  server www.kkk.com;

  server www.benet.com;

}

location {

 

 proxy_pass http://123;

 proxy_set_header HOST $host;

 proxy_set_header X-Real-IP $remote_addr;

}

 

 

四层代理:

在四层代理中可以使用加权轮询 最小连接数算法也可以实现负载均衡但是ip_hash url hash不可以在stream中使用

四层不能对请求处理,只能转发数据包

HTTP七层代理:可以处理请求地址和请求的URL

四层代理和七层代理

基于tcp/udp协议的IP+端口,数据包转发。对请求没有任何操作和处理。

七层代理: 基于http协议,对请求的内容进行处理,转发到后端服务器。

速度:四层的速度快,内核,不做任何处理,转发速度比较快

      七层走的是用户态,需要对内容进行处理,转发速度相对较慢

正向代理和反向代理:

正向代理:都是通过代理服务器访问,明确指向后端服务器。一般都是一对一

反向代理(用的最多):都是通过代理服务器访问,一个代理服务器会有多台后端服务器提供代理服务器进行转发请求。一对多。

 

只有一对多才涉及负载均衡的算法问题。

 

算法:

1、轮询(默认算法,可以不加。一般情况下不会用默认)

2、加权轮询(给后端服务器设置不同的权重,通过权重分发客户端的请求。权重高的轮询的次数就多,权重的少,轮询的次数就比较少。但是不绝对。权重高的服务器会被频繁的请求)

3、最小连接数(会把请求转发到当前连接数较小的服务器,避免请求全集中到高性能或者高权重的服务器。可以和加权轮询配合使用。使用大部分场景)

4、ip hash(根据客户端请求的ip地址生成一个hash值,然后转发到后端服务器,下一次再访问,还是之前的服务器。而且还有缓存。需要把请求客户端地址,转发到固定的服务器,可以使用这个方法。大并发可以,小并发也可以。但是后端服务器发生变化,请求的后端服务器也会发生变化(后台端服务器数量变少了,后端服务器的数量增加了,请求的地址未必会变))

缩容的情况,业务量比较少,不需要那么多后端服务器,才会缩容。只会扩

5、url_hash(根据请求的url地址生成一个hash值,然后转发到后端服务器,但是i西安一次访问,如果请求的url不变,还是上一次访问的后端服务器。而且也有缓存。url地址发生变化或者后端服务器的数量发生变化,可能会变更后端服务器的地址)

 

配置方式:

HTTP:七层正向反向

location {

 

proxy_pass http://192.222.222.60;

 

}

 

 

反向:HTTP的全局配置中定义uostream模块

负载均衡的算法配置在upstream模块中

upstream 123{

 

 server 192.222.222.60;

 server 192.222.222.100;

 

}

默认

 

upstream 123{

 

 server 192.222.222.60 weight=2;

 server 192.222.222.100;

 

}

加权

 

 

 

sever块的location当中: 制定代理服务器的方法

location {

proxy_pass http://ky32;

 

 

四层

只能写在全局配置当中

stream {

upstream 123{

 

 server 192.222.222.60;

 server 192.222.222.100;

 

}

 


http://www.niftyadmin.cn/n/5095031.html

相关文章

【Python】Python求均值、中值和众数

Python求均值、中值和众数 我们将讨论如何使用描述性统计数据进行数据分析,包括: 均值——一组值的平均值; 中值——当所有值按顺序排列时的中间值; 众数——最常出现的值。 以上这些都是集中趋势度量,每种都会产生一个值来表示一组值中的“…

Netty-SocketIo 完美替换 nodejs 的 socketio

背景 前段时间接到一个任务,用Java重构一个nodejs项目,其中用到了websocket的功能了,在nodejs项目中用的是socketio框架来实现websocket的功能,前端对应的也使用了socketio jar包。 一开始对socketio的用法并不是很清楚&#xff…

【前端】vue在Windows平台IIS的部署

系列文章 【C#】IIS平台下,WebAPI发布及异常处理 本文链接:https://blog.csdn.net/youcheng_ge/article/details/126539836 【Vue】vue2与WebApi跨域CORS问题 本文链接:https://blog.csdn.net/youcheng_ge/article/details/133808959 文章目…

假如你有一台服务器,你最想做哪些事

假如你有一台服务器,你最想做哪些事 在这个数字化的时代,服务器已经成为了我们生活中不可或缺的一部分。它们为我们提供了无数的便利,让我们的生活变得更加丰富多彩。那么,假如我有一台服务器,我会如何使用它呢&#…

uniapp(uncloud) 使用生态开发接口详情(1简单的创建)

开发接口对比时间: 用java开发接口周期太长, 大概5-6个月左右 用php 开发接口周期同样太长, 大概3-4个月左右 用node.js 开发接口周期相对短一点, 大概1-2个月左右 用uniapp 开发接口, 可以不到 1-2周的时间 这里我使用 uniapp 开发接口, 废话不多说了,直接开干 HBuilder官网(…

Java|学习|异常

1.异常 1.1 异常 1.1.1 概述 异常:就是程序出现了不正常的情况。 Error:严重问题,不需要处理。 Exception:称为异常类,它表示程序本身可以处理的问题。 RuntimeException:在编译器不检查,出…

【EI会议征稿】第三届高性能计算与通信工程国际学术会议(HPCCE 2023)

第三届高性能计算与通信工程国际学术会议(HPCCE 2023) 第三届高性能计算与通信工程国际学术会议(HPCCE 2023)将于2023年12月22-24日在长沙召开。HPCCE 2023将围绕“高性能计算与通信工程”的最新研究领域,为来自国内外高等院校、科学研究所、…

第一章 STM32 CubeMX (CAN通信发送)基础篇

第一章 STM32 CubeMX (CAN通信)基础篇 文章目录 第一章 STM32 CubeMX (CAN通信)基础篇STM32中文手册简介简介stm32f1系列CAN的特点CAN连接网络示意图硬件电路CAN波特率计数 一、 STM32 CubeMX设置设置波特率工程目录结构添加CAN驱…