nginx反向代理与负载均衡

负载均衡依靠反向代理实现。nginx的代理分为七层代理与四层代理:

七层代理:七层代理的就是http请求和响应。七层代理是最常用的反向代理方式,只能配置在nginx配置文件的http模块。而且配置方法名称:upstream模块,不能写在server重,也不能在location重,在http模块中是一个独立的配置。七层代理:七层代理的就是http请求和响应。

过程:客户端----http请求----七层代理(代理服务器上)----代理服务器转发http请求到内部的一组服务器(web集群)----客户端不知道请求的是代理服务器还是内部服务器,而且通过代理服务器隐藏了内部服务器ip。

客户机实际上访问的是代理服务器,请求到代理,代理转发给web服务器。Web服务器响应。

四层代理:基于tcp/ip协议层的代理转发方式。可以基于ip地址和端口进行负载均衡转发。四层代理无法获取http请求中的url信息,只能对tcp/udp数据包进行流量转发。Stream,stream不能配置在http模块中,只能配置在全局中。是一个独立的模块。

四层代理与七层代理区别:

1,七层走的是http请求,四层走的tcp/udo数据包,转发的是流量。

七层代理,http请求,可以对请求进行深入的解析和处理。流量控制,内容过滤。四层代理不能进行流量控制,也没办法对内容进行过滤。四层代理适用于需要处理大量连接请求的场景。七层要求对请求进行精确处理和控制的场景。实际工作中,四层和七层可以配合使用。

2,四层代理速度比七层代理速度快:

四层:

1,四层只是流量转发,不能对请求进行解析和控制

2,四层代理走到是内核,内核转发流量。

七层:

1,七层需要对请求进行处理和解析,速度会比较慢

2,七层走的是用户态,访问控制,流量处理。

七层代理可以提供更高级的服务和更高的用户体验。

正向代理:proxy_pass配置代理服务器访问的地址,只能写在location模块中。

反向代理:客户端访问代理服务器,代理服务器转发请求或者流量到后端服务器,后端的web服务器会有多台,用户并不知道最终访问的是哪一台。

负载均衡:高可用,可扩展,提高维护性。

反向代理的实现:

Upstream:基于http实现负载均衡,反向代理。

特点:

1,http请求的负载均衡方式

2,没有缓存

3,负载均衡的算法

1,默认算法:轮询 rr 请求轮流分配给后端服务器,适用于web服务器处理能力相近的情况,默认算法可以不加。

复制代码
upstream kuai {
    server 192.168.48.16;
    server 192.168.48.14;
}

2,加权轮询:建立在轮询算法上,根据不同的web服务器权重,让处理能力更强的服务器可以分配到更多的请求。虽然配置了权重值,但是轮询的结果未必准确。

复制代码
upstream kuai {
    server 192.168.48.16 weight=2;
    server 192.168.48.14 weight=3;
}

3,最小连接数:least_conn:会轮询,请求发送给当前连接数最少的后端web服务器。适用于后端服务器处理任务耗时不同的情况,避免了所有请求集中在处理能力更强的后端服务器上。会和加权轮询一起使用。

复制代码
upstream kuai {
    least_conn;
    server 192.168.48.16;
    server 192.168.48.14;
}

4,ip_hash:根据ip地址计算出一个哈希值,根据ip_hash算法,同一个客户端的请求会被分配到同一个后端服务器,保证会话的稳定性。后端服务器数量发生变化,哈希值会重新计算,请求的服务器也会发生变化。

复制代码
upstream kuai {
    ip_hash;
    server 192.168.48.16;
    server 192.168.48.14;
}

5,url_hash:根据uri地址计算哈希值,使用url_hash会把相同请求的uri会分配到同一个后端web服务器。

复制代码
upstream kuai {
    hash $request_uri consistent;
    server 192.168.48.16;
    server 192.168.48.14;
}

6,fair:根据流量大小,请求次数智能化转发,需要硬件支持。

使用场景:

小场景:并发量很小,默认算法就可以满足适应条件。后端web服务器的处理能力有差异:加权轮询,和最小链接数配合使用。

大型并发: ip_hash ,url_hash。第一次请求之后,会有本地缓存,而且因为hash算法的原因,请求的后台web服务器不会发生变化,可以提噶访问速度,访问的是缓存。减轻了后台服务器的请求压力。

Ip_hash,后端web服务器数量发生变化,请求的服务器也会发生变化。

Url_hash,请求的地址发生变化,请求的服务器也可能发生变化。

相关推荐
Avan_菜菜3 小时前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB1 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220703 天前
如何搭建本地yum源(上)
运维
ping某4 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树886 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠6 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质6 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工6 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智6 天前
ARP代理--工作原理
运维·网络·arp·arp代理