四层代理和七层代理
四层代理 是基于tcp/udp协议的 IP+端口,数据包转发,对请求没有任何操作和处理
七层代理 基于http协议,对请求的内容进行处理,转发到后端服务器
速度:四层的速度快,内核,不做任何处理,转发速度比较快
七层走的是用户态,需要对内容进行处理,转发速度相对较慢
正向代理和反向代理
正向代理:都是通过代理服务器访问,明确指向后端服务器,一般的都是一对一
反向代理:也是通过代理服务器访问,一个代理服务器会有多台后端服务器提供代理服务器进行转发请求,一对多
只有一对多,才涉及负载均衡的算法问题
算法
1、轮询 ,默认算法可以不加
2、加权轮询,给后端服务器设置不同的权重,通过权重分发代理客户端的请求,权重高的轮询的次数就多,权重的少,轮询的次数就比较少,但是不绝对,权重高德服务器会被频繁的请求
weight=权重值;
3、最小连接数,会把请求转发到当前连接数较小的服务器,避免请求全集中到高性能或者高权重的服务器,可以和加权轮询配合使用
使用大部分场景
4、ip_hash,根据客户端请求的IP地址生成一个hash值,然后转发到后端服务器,下一次在访问,还是之前的服务器,而且还有缓存
需要把请求客户端地址,转发到固定的服务器,可以使用这个方法,大并发可以,小并发也可以,但是后端服务器发生变化,请求的后端服务器也会发生变化(后端服务器数量变少了,后端服务器的数量增加了,请求的地址未必会变)
缩容的情况,业务量比较少,不需要那么多后端服务器,才会缩容,只会扩
5、url_hash,根据请求的url地址生成一个hash值,然后转发到后端服务器,但是下次访问,如果请求的url不变,还是上次访问的后端服务器,而且也有缓存
url地址发生变化,或者后端服务器数量也会发生变化,可能会变更后端服务器的地址
实验
正向代理配置
类似于vpn ,科学上网,加速器
关闭防火墙安全机制
location / {
root html;
index index.html index.htm;
proxy_pass http://指定的服务器
}
企业架构都是反向代理
客户端通过代理服务器访问,但是后端有多台
七层代理
#在http全局配置
upstream 自定名称 {
server IP地址;
server IP地址;
}
location / {
root html;
index index.html index.htm;
proxy_pass http://自定名称;
}
负载均衡的算法
加权轮询
upstream 自定名称 {
server IP地址 weight=2;
server IP地址 weight=3;
}
在http全局配置
location / {
root html;
index index.html index.htm;
proxy_pass http://自定名称;
}
最少连接数算法
upstream 自定名称 {
least_conn;
server IP地址 weight=2;
server IP地址 weight=3;
}
在http全局配置
location / {
root html;
index index.html index.htm;
proxy_pass http://自定名称;
}
ip_hash
upstream 自定名称 {
ip_hash;
server IP地址 weight=2;
server IP地址 weight=3;
}
在http全局配置
location / {
root html;
index index.html index.htm;
proxy_pass http://自定名称;
}
url_hash
upstream 自定名称 {
hash $request_uri consistent;
server IP地址 weight=2;
server IP地址 weight=3;
}
在http全局配置
location / {
root html;
index index.html index.htm;
proxy_pass http://自定名称;
}
反向代理
基于域名
#改主机名
upstream 自定名称 {
server 域名1 weight=2;
server 域名2 weight=3;
}
location / {
root html;
index index.html index.htm;
proxy_pass http://自定名称;
proxy_set_header HOST $host;
#请求本机的IP地址
proxy_set_header X-Real-IP $remote_addr;
#传给后端服务器
}
#改变剩余两台客户机的域名加主机
四层反向代理
在全局模块中写
stream {
upstream test {
server IP地址1:80;
server IP地址2:80;
}
server {
listen 80;
#监听端口
proxy_pass test;
}
}