当前位置: 首页 > article >正文

正向代理和反向代理

Nginx当中有两种代理方式:

七层代理(http协议)

四层代理(tcp/udp流量转发)

七层代理:代理的是http的请求和响应。

客户端请求代理服务器,由代理服务器转发客户端的http请求。转发到内部的服务器(可以是单台,也可以是一组)

后端的webserver,再把响应送达代理服务器,最后再到客户端

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

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

四层代理:基于tcp/ip协议层的转发代理方式,基于ip和端口号实现负载均衡,或者正向代理

四层代理无法获取http请求中的URL信息,只能对TCP/UDP的数据包进行转发

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

  1. 七层代理走的是用户态,需要对http的请求进行处理和解析,解析过程中,可以根据请求头和请求体的内容进行流量控制,内容过滤,转发速度比较慢,但是提供的功能更高级,用户的体验更好

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

2.选择场景:

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

四层代理:只需要转发tcp/udp数据包(流量),可以选择四层也可以选择七层

无法使用四层代理:

七层可以对ip和端口进行转发,也可以对域名进行代理

四层只能是ip和端口

负载均衡算法:有些是无法在四层代理使用

3.模块

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

upstream:用于处理http请求,支持反向代理,负载均衡,缓存功能

在upsream模块中可以配置多个服务器

四层代理模块:

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

正向代理:

类似于vpn科学上网,加速器

企业架构都是反向代理:

客户端通过代理服务器访问,但是后端有多台

七层代理;

http全局配置

hpstream test {

 server 192.168.120.30

 server 192.168.120.40

}

location {

proxy_pass http://test:

}

负载均衡的算法:

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

默认算法,可以不加

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

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

2.加权轮询weight建立在默认轮询算法的基础上。为后端服务器分配不同的权重,处理能力强的服务器可以分配的权重值要高一些。

轮询次数基本上按照权重进行分配。服务器上也没有缓存

中大型网站可以使用加权轮询

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

3.最少连接数算法,会把请求放送到连接数量较少的后端服务器安全

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

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

4.ip_hash:iphash会根据客户端ip地址解析出一个hash值,然后将请求放到对应的后端服务器,下一次用户再访问时,同一客户端的请求将会被分配到同一台服务器

ip_hash第一次访问之后,后续访问是有缓存的

如果后端服务器的数量发生变化,可能会进行重新分配

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

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

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

基于域名的反向代理:

代理服务器:

四层的反向代理:

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

但是ip_hash url_hash不可以在stream中使用

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

http七层代理:可以处理请求地址和请求的url


http://www.kler.cn/a/108688.html

相关文章:

  • quartz
  • Python 随笔
  • 前端神经网络入门(三):深度学习与机器学习的关系、区别及核心理论支撑 - 以Brain.js示例
  • C++20 中最优雅的那个小特性 - Ranges
  • AI写作(二)NLP:开启自然语言处理的奇妙之旅(2/10)
  • Spark 的容错机制:保障数据处理的稳定性与高效性
  • 基于springboot实现校园疫情防控系统项目【项目源码+论文说明】计算机毕业设计
  • 【多线程面试题 八】、说一说Java同步机制中的wait和notify
  • 如何借助数据集更好的评估NLP模型的性能?
  • 【数据结构】数组和字符串(九):稀疏矩阵的链接存储:十字链表的插入、查找、删除操作
  • 大数据可视化BI分析工具Apache Superset实现公网远程访问
  • 【数据结构】Map和Set
  • 深入浅出排序算法之基数排序
  • OS的Alarm定时器调度机制
  • oracle,CLOB转XML内存不足,ORA-27163: out of memory ORA-06512: at “SYS.XMLTYPE“,
  • Think-Queue3一直提示[Exception]redis扩展未安装
  • 开源B2B网站电子商务平台源码下载搭建 实现高效交易的桥梁
  • Kotlin数据流概览
  • server2012 通过防火墙开启局域网内限定IP进行远程桌面连接
  • 工作组与域
  • 基于SSM的汽车维修管理系统
  • 透明安全地解释Moonbeam基金会分配的GLMR去了哪
  • 【K8S】常用的 Kubernetes(K8S)指令
  • LV.12 D12 GPIO实验 学习笔记
  • Makefile泛谈
  • 9、电路综合-基于简化实频的任意幅频响应的微带电路设计