nginx之正向代理、反向代理和负载均衡(重点)

一、nginx的两种代理方式

1、七层代理(http协议)

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

二、四层代理和七层代理

(一)四层代理:基于tcp/udp协议的ip和端口转发数据包

1、四层代理无法获取http请求中的url信息,只能对tcp/udp的数据包进行转发,对请求没有任何操作和处理

(二)七层代理:代理的是http的请求和响应

1、客户端请求代理服务器,由代理服务器转达客户端的http请求,转发到后端的服务器(可以是单台、或一组)

2、后端的web server再把响应送到代理服务器,最后再到客户

(三)四层代理和七层代理的区别(重点)

1、七层代理

(1)七层代理走的是用户态,需要对http的请求进行处理和解析,解析过程中,可以根据请求头和请求体的内容进行流量控制、内容过滤

(2)七层代理转发速度比较慢,但是提供的功能更高级,用户的体验更好

(3)七层代理可以对IP和端口进行转发,也可以对域名进行代理

2、四层代理

(1)四层代理走的是内核,是基于IP和端口号,只负责将流量(IP和端口)转发到后端服务器,不对请求做任何处理,只是负责转发

(2)四层代理速度较快,但无法提供更高级的功能,只是转发

(3)四层代理只能对IP和端口进行转发

3、选择场景

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

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

4、模块

(1)七层代理的模块:只能写在http模块的全局配置中(upstream)

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

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

(2)四层代理的模块:只能写在全局模块当中的单独配置(stream)

①stream代理是无谓协议,只管流量

(四)四层代理和七层代理的配置

1、四层代理的配置:只能写在全局配置当中(stream)

stream  {

   upstream test {

   server 20.0.0.12;

   server 20.0.0.14;

#默认轮询

#加权轮询

#最小连接数

}

server {

listen  80;

proxy_pass http://test

}

}

2、七层代理的配置

(1)正向代理

location {

proxy_pass http://20.0.0.12;

}

(2)反向代理

①在http的全局配置中定义upstream模块、负载均衡的算法配置在upstream模块中

upstream yyy {

least_conn;

ip_hash;

url_hash;

server 20.0.0.12 weight;

server 20.0.0.13 weight;

}

②在server块的location中,指定代理服务器的方法

location {

proxy_pass http://yyy;

}

三、正向代理和反向代理

(一)正向代理

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

2、客户端也是访问代理服务器,代理服务器转发请求,客户端只代理服务器的地址,而后端的web server的IP地址客户端也不知道

(二)反向代理

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

2、都是通过代理服务器访问,一个代理服务器会有多台后端服务器供代理服务器进行转发请求,一对多

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

(三)正向代理的配置方法(类似vpn、加速器)

nginx1作为客户端、nginx2和nginx3作为代理服务器

通过20.0.0.11直接访问20.0.0.12

(四)反向代理的配置:客户端通过代理服务器访问,但后端有多台(企业架构都是反向代理)

四、负载均衡算法

(一)rr(round robin):轮询(负载均衡最简单的算法)

1、含义:请求轮流分配到后端服务器,是默认算法,可以不加

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

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

(二)加权轮询:weight(建立在默认轮询算法之上)

1、含义:为后端服务器设置不同的权重,通过权重分发客户端的请求

2、特点:

(1)处理能力强的服务器可以分配的权重值要高一些

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

(3)有可能导致权重高的服务器被频繁的请求响应,权重低的可能闲置,这时会和另外一种算法配合使用——最少连接数算法

3、适用场景:中大型网站可以使用加权轮询

(三)最小连接数算法:会把请求发送到连接数量较小的后端服务器(least_conn)

1、特点:

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

2、适用场景:中型网站、大型网站,日常访问可以满足

(四)ip_hash

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

2、特点:

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

(2)如果后端服务器的数量发生变化,可能会进行重新分配,请求的后端服务器可能会发生变化(后端服务器数量变少一定会变化;后端服务器的数量增加,请求的地址未必发生变化)

(3)缩容的情况:业务量比较少,不需要那么多后端服务器,才会缩容,一般只会扩不会缩

3、适用场景:ip_hash适用于高并发,请求不会跳转,请求的是缓存(用于:把请求的客户端地址,转发到固定的服务器)

(五)url_hash:

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

2、特点:

(1)url_hash访问之后,后续都是访问缓存,可以降低后端服务器的压力

(2)url地址发生变化,或者后端服务器数量也发生变化,可能会变更后端服务器的地址

3、适用场景:url_hash和ip_hash可以结合在一起使用,可以适用于并发较高的场景

五、基于域名的反向代理

nginx1作为客户端、nginx2和nginx3作为代理服务器

(一)客户端配置

(二)代理服务器配置

六、配置四层的反向代理(全局模块中配置;基于ip和端口)

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

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

2、但是ip_hash和url_hash这两种算法不可以在stream中使用,只有http协议可以请求和处理,四层不能对请求进行任何处理,只是转发数据包。因此、只有http七层代理可以处理请求地址和请求的url

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nginx是一款强大的开源Web服务器软件,除了支持常规的Web服务器功能外,还可以用作正向代理反向代理负载均衡以及动静分离的配置。 正向代理是指客户端通过代理服务器发送请求,然后由代理服务器转发到目标服务器,从而隐藏客户端的真实身份。在nginx中,可以通过配置修改proxy_pass指令来实现正向代理功能。 反向代理是指客户端发送请求到代理服务器,代理服务器再将请求转发到后端的服务器,然后将后端服务器的响应返回给客户端,客户端无法直接访问到后端服务器。在nginx中,可以通过修改proxy_pass指令来实现反向代理,并且可以使用负载均衡来分配请求到多个后端服务器。 负载均衡是指将请求分发到多个服务器上,以达到均衡负载的目的。在nginx中,可以使用upstream模块配置多个后端服务器,并通过配置proxy_pass和proxy_redirect实现请求的负载均衡nginx支持多种负载均衡算法,如轮询、IP哈希等。 动静分离是指将动态资源和静态资源分别部署在不同的服务器上,以提高系统性能和并发能力。在nginx中,可以通过配置location指令将动态请求和静态请求分别代理到不同的后端服务器或直接返回静态文件,从而实现动静分离。 总结来说,nginx通过配置实现了正向代理反向代理负载均衡和动静分离等功能,在提供Web服务的同时,能够提高系统的性能、并发能力和安全性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值