一、反向代理
1 介绍
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率.
特点:
- 反向代理服务器 介于用户与目标服务器之间 (3个组成部分)
- 用户以为反向代理服务器就是目标服务器.
- 用户不清楚真实的目标服务器地址
2 机制
步骤:
核心知识: 用户出于某种原因 无法直接访问服务器.所以采用代理机制
- 用户向代理服务器发送请求,(以为代理服务器就是真是目标服务器)
- 代理服务器接收请求时,根据自己的映射文件,重新发起新的请求 访问真实的目标服务器.
- 根据映射路径,查找真实的服务器资源.
- 获取资源返回给代理服务器.
- 代理服务器将资源交换给用户.
场景:
用户 中介(婚姻中介,房屋中介) 资源池
二、正向代理
1 介绍
正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
特点:
1.正向代理介于用户与目标服务器之间.
2.用户非常清楚的知道自己访问的远程资源到底是谁.
3.一般采用正向代理时 都是为了实现网络的通信
2 解析
三、Nginx
1 介绍
总结: Nginx是一个主流的 反向代理服务器/负载均衡服务器.
特点:
1.占用内存少 启动一个服务运行内存不超过2M (C语言开发的)
2.并发能力强,官方测试数据 5万/秒并发能力,实测: 2-3万/秒
科普: 单台tomcat服务器并发能力 220/秒 JVM调优 增大JVM运行内存空间
配合服务器监控.根据当前硬件设备进行优化. 经过JVM调优之后的tomcat服务器 可以达到 1000/秒
2 安装(windows环境下)
2.1 下载
2.2 解压
浏览器访问 localhost
2.3 Nginx关于进程项说明
注意事项: 每次Nginx启动都会启动2个进程,如果重复启动则进程项会有多个.但是其它的进程不起作用 容易混淆.
关于进程项说明:
- 主进程: 主要提供反向代理服务,内存占用大的
- 守护进程: 防止主进程意外关闭的.,内存占用小的
注: 先关闭守护再关闭主进程.
2.4 nginx命令
说明: nginx命令执行需要在nginx.exe的根目录中完成
启动nginx start nginx
则负责启动nginx服务器,至于报错不提示
重启nginx nginx -s reload
检查程序是否正确,有报错提示.
停止nginx nginx -s stop
说明: 命令参数 -s 指向主进程发送信号
2.5 nginx.conf配置文件说明
#每个反向代理服务都是一个server
server {
#监听端口号 一般默认都是80
listen 80;
#拦截用户访问的路径
server_name localhost;
#反向代理配置 / 拦截所有请求
location / {
#root关键字 代表的是一个目录
root html;
#index关键字 默认的欢迎页面
index index.html index.htm;
}
}
四、反向代理入门案例
1 业务图片代理说明
- 用户URL地址 http://image.jt.com/2021/07/13/2baf5a45be974e8897130a8ea89e1178.jpg
- 文件磁盘地址 D:/images/2021/07/13/2baf5a45be974e8897130a8ea89e1178.jpg
原因: 远程URL地址与本地的磁盘地址不能映射.
解决方案: 用户访问http://image.jt.com 应该到D:/images
2 修改nginx配置项
nginx.conf 文件 http内增加一个反向代理服务器server
#配置图片反向代理
server {
listen 80;
server_name image.jt.com;
location / {
root D:/images;
}
}
说明: 修改之后需要重启nginx服务器.
2 修改hosts文件
在hosts文件末尾增加一行 127.0.0.1 image.jt.com
作用: 主要在本机实现 域名与IP的映射
3 图片回显工作原理
五、负载均衡
需求:要求用户通过http://manage.jt.com 访问http://localhost:8091或http://localhost:8092服务器.
并且实现负载均衡的效果.
1 集群部署准备
1.1 集群概念
说明: 由多台服务器组成的一个物理结构. 这些服务器可以提供相同的服务. 把这样的结构称之为集群
1.2 动态获取端口号
说明: 在集群中有多台tomcat服务器,用户每次访问都会只访问其中1台. 应该如何选择?这时应该采用负载均衡算法. 所以编辑如下代码方式动态获取端口号,验证负载均衡算法实用性.
@CrossOrigin
@RestController
public class PortController {
@Value("${server.port}")
private Integer port;
@GetMapping("getPort")
public String getPort() {
return "动态获取端口号:" + port;
}
}
1.3 后端项目发布
分别将项目打包 端口号分别为 8091/8092
项目发布流程点这里>>>
2 负载均衡策略
2.1 轮询
规则说明: 根据配置文件的顺序依次访问,根据客户端来访时间先后进行分发,是默认的策略
缺陷:要求各个服务器的处理能力相当
#准备集群
#负载均衡策略: 1.轮询机制
upstream tomcats {
server 127.0.0.1:8091;
server 127.0.0.1:8092;
}
#配置后端服务器.
server {
listen 80;
server_name manage.jt.com;
access_log logs/manage.log;
#防止丢失请求头host
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
#代理的是一个请求网址
#proxy_pass http://localhost:8091;
proxy_pass http://tomcats;
}
}
2.2 权重
关键字: weight= 阿拉伯数字
根据服务器的权重值(性能)尽量按比例动态分配
缺陷:无法满足单调性原则(一个客户端被分配到不同的服务器,数据无法共享,session)
单调性:期望尽可能的使用同一台服务器处理同一个客户端的多个请求
upstream tomcats {
server localhost:8091 weight=9;
server localhost:8092 weight=1;
}
对于上面的配置,第一个weight=9,第二个weight=1,总数是10。
即第一个tomcat负载90%的请求,第二个tomcat负载10%的请求
3 IP_HASH
规则: 如果需要用户与服务器进行绑定 则采用IPHASH方式.(保证单调性)
要素: IP地址 端口号
算法: hash(ip:端口)%2 余数 0或者1
缺陷:服务器数量发生变化,会导致原有的映射关系大量实现,甚至完全无法正常使用
#准备集群
#负载均衡策略 1.轮询机制 2.权重机制 3.IPHASH
upstream tomcats {
ip_hash;
server localhost:8091 weight=9;
server localhost:8092;
}
4 一致性hash算法
由于hash算法对同一客户端的运算结果必然是相同的,所以最大化的保证了单调性原则
由于使用了环形结构,所以在增加或减少服务器数量时,能尽可能降低整个环形结构中客户端与服务器映射关系发生改变导致的影响,增加了集群的动态伸缩性,使得整个集群的容灾性更强
更多了解hash点我》》》
六、nginx实现tomcat高可用
1 高可用(HA)说明
如果发现服务器宕机,则程序可以自动化的实现故障的迁移.无需人为干预.
2 Nginx策略
根据配置文件的顺序,依次访问服务器.如果访问的服务器超时,则自动的切换下一台服务器.
弊端: 如果宕机的服务器不做配置,则会频繁的访问故障机. 默认规则
3 Nginx常用属性
1.down属性 如果该属性标识服务器,则nginx永远不会访问该设备.
2.backup属性 设定备用机,正常情况下,该设备不提供服务. 如果其他的设备宕机/遇忙时 才会访问备用机
upstream tomcats {
#ip_hash;
server 127.0.0.1:8091 weight=8;
server 127.0.0.1:8092 backup;
server 127.0.0.1:8093 down;
}
4 项目如何在线部署
需求: 在不影响用户使用的条件下 如何将项目升级!!!
步骤:
- 将需要升级的服务器 在nginx中标识为down属性.
- 重启nginx服务器
- 将新的jar包文件部署到服务器中.
- 进行软件调试. 如果测试无误.修改nginx down属性进行切换.
5 Nginx 高可用实现方案
说明: 如果服务器宕机 通过down属性进行标识,则需要人为的干预,这样的方式效率低. 最好的方式由程序自动完成.
属性说明:
- max_fails=1 设定访问失败的最大次数
- fail_timeout=60s; 设定失败的超时时间,在超时时间范围内不会再次访问故障机.
#轮询服务器
upstream tomcats {
#ip_hash;
server 127.0.0.1:8091 max_fails=1 fail_timeout=60s;
server 127.0.0.1:8092 max_fails=1 fail_timeout=60s;
}