nginx

x33g5p2x  于2021-11-21 转载在 其他  
字(2.1k)|赞(0)|评价(0)|浏览(215)

Nginx

反向代理
会出现多入口问题,用nginx利用负载均衡算法转发给tomcat处理请求

Nginx主要应用

 静态网站部署
 负载均衡
 静态代理
 动静分离
 虚拟主机

静态网站部署

Nginx是一个HTTP的web服务器,可以将服务器上的静态文件(如HTML、图片等)通过HTTP协议返回给浏览器客户端。这能是静态文件
修改配置文件下的location

负载均衡

请求上限
负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀。

负载均衡实现方式

1)硬件负载均衡
比如 F5、深信服、Array 等

2)软件负载均衡
比如 Nginx、LVS、HAProxy 等

Nginx常用负载均衡策略
1) 轮询(默认)
如果后端服务器down掉,将自动剔除

2)权重
每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况
weight=2
weight=5,不是给它发两个给它发五个轮着来,而是上面那个处理2个请求的时间和下边那个处理5个请求的时间一样,假设一共7个

3)最少连接
web请求会被转发到连接数最少的服务器上

upstream backserver { 
	least_conn;//最少连接数
	server 127.0.0.1:8080; 
	server 127.0.0.1:9090; }

以上三种,session存放在tomcat上,所以会出现session丢失的问题(重新登录)

4)ip_hash
ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题
算法:hash(“124.207.55.82”) % 2 = 0, 1,
模2的原因是因为有两个机器

upstream backserver { 
	ip_hash; 
	server 127.0.0.1:8080; 
	server 127.0.0.1:9090; }

虽然解决了session丢失的情况,但有可能出现服务器压力过大down掉,用户ip变了,但是模值不变,导致可能一致转发给某一台服务器上,导致down掉

其他配置
配置1

upstream backserver { 
	server 127.0.0.1:9100;
	#其它所有的非backup机器down的时候,才请求backup机器
	server 127.0.0.1:9200 backup; } 
	//不是保底的,而是想更新tomcat代码,更新这个backup

配置2

upstream backserver { 
server 127.0.0.1:9100;
#down表示当前的server是down状态,不参与负载均衡
    server 127.0.0.1:9200 down; 
}

一般在项目上线的时候,可以分配部署不同的服务器上,然后对Nginx重新reload。
reload不会影响用户的访问,或者可以给一个提示页面,系统正在升级…

静态代理

动静分离

Nginx的负载均衡和静态代理结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景。
动态资源,如jsp由tomcat或其他web服务器完成
静态资源,如图片、css、js等由nginx服务器完成
它们各司其职,专注于做自己擅长的事情
动静分离充分利用了它们各自的优势,从而达到更高效合理的架构

虚拟主机

虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站。

配置文件中多配置几个server

集群后丢失session的原因

解决方案

 第一种是使用容器扩展插件来实现,这个方案的好处是对项目来说是透明的,无需改动代码,但是由于过于依赖容器,一旦容器升级或者更换意味着又得重新配置其实底层是,复制session到其它服务器,所以会有一定的延迟,也不能部署太多的服务器。

 第二种是使用Nginx负载均衡的ip_hash策略实现用户每次访问都绑定到同一台具体的后台tomcat服务器实现session总是存在

 第三种是自己写一套Session会话管理的工具类,在需要使用会话的时候都从自己的工具类中获取,而工具类后端存储可以放到Redis中,这个方案灵活性很好,但开发需要一些额外的时间。

 第四种是使用框架的会话管理工具,也就是我们要介绍的Spring session,这个方案既不依赖tomcat容器,又不需要改动代码,由Spring session框架为我们提供,可以说是目前非常完美的session共享解决方案

Spring Session入门

同域名下相同项目(集群环境)实现Session共享,同一个项目,部署了多台tomcat,这就是典型的集群。我们的入门案例就属于这种应用场景,只不过在实际开发的过程中,我们如果存在了tomcat集群,那么肯定会使用nginx进行负载均衡,那么这种情况下我们该如何处理

SpringBoot集成SpringSession

加两个依赖,配置文件配置redis

相关文章