Nginx :正向代理 反向代理 负载均衡是和反向代理使用
1、Nginx有两种代理方式
七层代理(http协议):代理的是http的请求和响应 客户端请求代理服务器 由代理服务器转发客户端的httpd请求 转发到内部的服务器(可以是单台也可以是一组)
后端的webserver再把响应送达代理服务器 最后再到客户端(转发http协议)
正向代理:客户端也是访问代理服务器 代理服务器转发请求 客户端只知道代理服务器的地址 后端的webserver的IP地址 客户端不知道
反向代理:客户端访问的是代理服务器 代理服务器转发http请求 但是客户端不知道访问的是哪台机器
四层代理(tcp/udp流量转发):基于tcp/ip协议层的转发代理方式 基于ip和端口号实现负载均衡或者正向代理 四层代理无法获取http请求中的URL信息 只能对TCP/UDP的数据包进行转发
面试题:四层代理和七层代理直接的区别:
七层代理走的是用户态 需要对http请求进行处理和解析 解析过程中 可以根据请求头和请求体的内容进行流量控制 内容过滤转发速度比较慢 但是提供的功能更高级 用户的体验更好
四层代理基于IP地址和端口号 只负责将IP和端口转发到后端服务器 不对请求做任何处理 只是负责转发 而且四层转发走的是内核 四层转发速度较快 四层代理无法提供更高级的功能 只是转发
2、选择场景 :
七层代理 :需要对http请求进行控制和处理 只能选择七层代理(常见的代理方式)
四层代理 :只需要转发tcp/udp数据包 可以选择四层 也可以选择七层
七层可以对IP和端口进行转发 也可以对域名进行代理
四层只能是IP和端口
负载均衡算法:有些是无法在四层代理使用
3、模块:
七层代理只能写在http模块的全局配置当中 upstream 用于处理http请求 支持反向代理 负载均衡 缓存功能 在upstream模块中可以配置多个服务器
四层代理 stream 只能写在全局模块当中的单独配置 stream代理无谓协议 只管流量
正向代理 类似于VPN 科学上网 加速器
企业架构都是反向代理 客户端通过代理服务器访问 但是后端有多台
七层代理写法 http全局配置
Upstream 自定义名 {
Server 192.168.1.3
Server 192.168.1.4
}
Location{
Proxy_pass http://自定义名
}
负载均衡的算法 算法都是配置在代理里面的:
url_hash和ip_hash结合一起使用 适用高并发场景 访问之后第二次都是访问缓存 可以降低服务器压力
Upstream ky32 {
Server www.kgc.com
Server www.benet.com
}
Location {
Proxy_pass http://ky32
Proxy_set_header HOST $host
Proxy_set_header X-Real-IP $remote_addr
}
第一台主机
第二台服务器
第三台服务器
四层反向代理 配置在全局模块中 可以使用加权轮询 最小连接数算法也可以实现负载均衡
但是ip_hash url_hash不可以再stream中使用 四层不能对请求处理 只是转发数据包
http七层代理可以处理请求地址和请求的url
总结:
四层转发和七层转发
四层:基于tcp/udp协议的ip+端口 数据包转发 对请求没有任何操作和处理
七层:基于http协议 对请求的内容进行处理 转发到后端服务器
速度:四层速度快 内核态 不做任何处理 转发速度快
七层走的是用户态 需要对内容进行处理 转发速度相对较慢
正向代理和反向代理:
正向代理:都是通过代理服务器访问 明确指向后端服务器 一般都是一对一
反向代理:都是通过代理服务器访问 一个代理服务器会指定多台后端服务器供代理服务器进行转发请求 只有一对多才涉及负载均衡的算法问题
配置方式:
http七层:正向 反向
正向:location{
Proxy_pass http://192.168.1.3;
}
反向:http的全局配置中定义upstream模块
负载均衡的算法配置中upstream模块中
upstream Ky32{
least_conn;
ip_hash; hash
$request_url consisten;
server 192.168.1.4 weight=2;
server 192.168.1.5 weight=3;
#默认轮询 加权轮询
}
Sever块的location中 制定代理服务器的方法
Location{
Proxy_pass http://ky32;
}
四层:只能卸载全局配置中
Stream{
Upstream test{
Server 192.168.1.3:80;
Server 192.168.1.4:80;
}
Server {
Listen 80;
Proxy_pass http://test;
}
}
正向代理 反向代理 默认轮询 加权轮询 最小连接数 ip_hash hash $request_uri consistent 基于域名 四层反向代理配合算法