nginx的正向代理和反向代理以及负载均衡

nginx的正向代理和反向代理以及负载均衡

正向代理

反向代理、负载均衡(结合在一起使用)

nginx当中有两种代理方式:

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

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

四层的速度快,内核态,并且不做任何处理

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

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

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

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

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

反向代理:通过代理服务器访问,一个代理服务器会有多台后端服务器供代理服务器进行转发请求。即一对多,只有一对多才涉及负载均衡的算法问题。客户端访问的是代理服务器,代理服务器转发http请求,但是客户端不知道访问的是哪一台服务器

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

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

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

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

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

2、选择场景

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

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

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

四层只能对ip和端口

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

3、模块:

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

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

四层代理:

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

正向代理:

类似于、加速器等科学上网

实验:

1:备份

vim nginx.conf

nginx -t

重启服务

浏览器访问61,直接到62

企业架构都是反向代理:

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

七层代理:

反向:

http全局配置

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

定义upstream{

server 20.0.0.62;

server 20.0.0.63;

}

location {

proxy_pass http://方法名;

}

vim 1 nginx.conf

nginx -t

重启

浏览器访问61,页面会替换,已经实现负载均衡

负载均衡的算法:

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

默认算法可以不加方法

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

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

2、加权轮询 weight,建立在默认轮询算法的基础之上,为后端服务器分配不同的权重,通过权重分发客户端的请求,处理能力强的服务器可以分配的权重值要高一些,权重高的服务器会被频繁请求(不绝对)。

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

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

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

vim nginx.conf

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

最少连接数算法可以单独使用,但是一般都是结合加权轮询一起使用,避免所有的请求都发送到处理能力强的服务器

可以提高整个集群的稳定性

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

vim nginx.conf

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

需要把请求客户端地址转发到固定的服务器,可以使用这个方法。大并发可以,小并发也可以,但是后端服务器发生变化,请求的后端服务器也会发生(后端服务器数量变少了,后端服务器的数量增加了,请求的地址未必会变)

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

vim nginx.conf

浏览器访问一直不变

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

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

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

5、url_hash,根据请求的url地址计算hash值,然后将请求发送到相应的后端服务器,但是下一次访问,如果是相同的url地址,请求会被分配到同一个服务器

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

浏览器访问一直不变,但是有缓存

总结:

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

基于域名的反向代理:七层

echo "20.0.0.61 www.12.cc" >> /etc/hosts

echo "20.0.0.62 www.kgc.com" >> /etc/hosts

echo "20.0.0.63 www.benet.com" >> /etc/hosts

2、3都要加入代理映射

虚拟机访问www.12.cc.com

基于ip:

浏览器访问20.0.0.61

ip_hash和url_hash都不能用

四层的反向代理:在四层代理中可以使用加权轮询,最小连接数算法也可以实现负载均衡,但是ip_hash和url_hash不可以在stream中使用

?四层不能对请求进行任何处理,只是转发数据包

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

你可能感兴趣的:(nginx,负载均衡,运维)