Nginx正向代理,反向代理和负载均衡

nginx的两种代理方式:

七层代理(http协议)

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

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

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

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

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

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

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

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

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

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

2.四层代理是基于IP地址和端口号,只负责将IP和端口转到后端服务器,不对请求做任何的处理,只负责转发。因为四层走的是内核,且不做处理,所以四层转发速度较快。

选择场景:

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

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

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

四层只能是ip和端口

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

模块:

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

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

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

四层代理的模块:

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

正向反向代理配置

正向代理:类似于vpn,科学上网,加速器。很少使用

server {

listen 82;

设置DNS的IP,用来解析proxy_pass中的域名

resolver 8.8.8.8;

location / {

proxy_pass http://hostrequest_uri;

}

}

企业架构都是反向代理,即客户端通过代理服务器访问,但是后端有多台服务器。

七层代理反向代理

:http全局配置

upstream test {

ip_hash

last_conn

hash_$request_uri consistent;

server 192.168.233.62 weight=3;

server 192.168.233.63 weight=2;

}

location {

proxy_pass http://test;

}

负载均衡的算法:

1、rr(round robin)

负载均衡最简单的算法,轮询。请求轮流分配到后端服务器。

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

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

2、加权轮询(weight)

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

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

权重高的服务可能会被频繁地请求响应。权重低的可能闲置。

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

3、最少连接数算法。

会把请求放送到连接数量较少的后端服务器。

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

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

4、ip_hash:

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

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

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

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

5、url hash

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

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

基于域名的反向代理:

upstream ky32{

server www.kgc.com weight=3;

server www.benet.com weight=2;

}

location {

proxy_pass http://ky32;

proxy_set_header HOST $host

proxy_set_header X-Real-IP $remote_addr;

}

四层的反向代理:

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

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

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

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

相关推荐
勤奋的凯尔森同学2 小时前
webmin配置终端显示样式,模仿UbuntuDesktop终端
linux·运维·服务器·ubuntu·webmin
技术小齐6 小时前
网络运维学习笔记 016网工初级(HCIA-Datacom与CCNA-EI)PPP点对点协议和PPPoE以太网上的点对点协议(此处只讲华为)
运维·网络·学习
ITPUB-微风6 小时前
Service Mesh在爱奇艺的落地实践:架构、运维与扩展
运维·架构·service_mesh
落幕6 小时前
C语言-进程
linux·运维·服务器
chenbin5207 小时前
Jenkins 自动构建Job
运维·jenkins
java 凯7 小时前
Jenkins插件管理切换国内源地址
运维·jenkins
AI服务老曹7 小时前
运用先进的智能算法和优化模型,进行科学合理调度的智慧园区开源了
运维·人工智能·安全·开源·音视频
sszdzq8 小时前
Docker
运维·docker·容器
book01218 小时前
MySql数据库运维学习笔记
运维·数据库·mysql
bugtraq20219 小时前
XiaoMi Mi5(gemini) 刷入Ubuntu Touch 16.04——安卓手机刷入Linux
linux·运维·ubuntu