nginx反向代理&负载均衡以及Nginx+tomcat集群+redis实现session共享实现

一、nginx

nginx是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强

二、 正向代理

如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

使用正向代理服务器作用主要有以下几点:

① 访问本无法访问的服务器B(“翻墙”)

② 加速访问服务器B(加速器)

③隐藏访问者的行踪(“隐藏行踪”)

正向代理,隐藏的是客户端

三、 反向代理:

其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器的命名空间*(name-space),由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址

反向代理,隐藏的是服务器

四、负载均衡

当去掉了增加服务器物理配置来解决问题的办法(万亿级别访问,硬件内存加大不能解决),也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为*将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的*负载均衡

Ngnix负载分配策略(以下是修改nginx.conf的配置文件位置)
在这里插入图片描述
①轮询(默认)按照时间顺序分配到后端服务器

		upstream server_list{
           # 这个是tomcat的访问路径
           server localhost:8080;
           server localhost:9999;
        }
        location / {
            root   html;
                        proxy_pass http://server_list;
            index  index.html index.htm;

②weight权重,权重高分配服务多,配置weigt大小,越大分配访问次数越多

upstream server_list{
	server localhost:8080 weight=5;
	server localhost:9999 weight=1;
}

③ip_hash每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,ip_hash;

upstream server_list{
	ip_hash;
	server localhost:8080;
	server localhost:9999;
}

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

upstream server_list{
	least_conn;
	server localhost:8080;
	server localhost:9999;
}

五、Nginx+tomcat集群+redis实现session共享

思想:将原来由每一个tomcat管理的session统一存储到redis中管理

准备工作:

分别打开两个tomcat:将其中一个作为备份;server.xml中三个端口更改;用来测试多个访问的session共享效果

<Server port="18005" shutdown="SHUTDOWN">
<Connector port="9999" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />               
<Connector port="18009" protocol="AJP/1.3" redirectPort="8443" /> 

在两个tomcat的新建webapps\myweb\index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<%@ page language="java" import="java.text.SimpleDateFormat"%>
<%  
  request.getSession().setAttribute("mzd","123");
  SimpleDateFormat simpleDateFormat=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
  String date=simpleDateFormat.format(new Date());
%>  

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>   
    <title>tomcat1</title>  
  </head>  
  <body>  
        SessionID:<%=session.getId()%>  
        <BR>  
        当前时间为:<%=date%>  
        <BR>  
        SessionPort:<%=request.getServerPort()%>  
        <BR>  
        mzd的值为:<%=session.getAttribute("mzd")%>  
       <BR>  
        <%  
        out.println("这是tomcat1");  
        %> 
  </body>  
</html>

下面是另一个页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<%@ page language="java" import="java.text.SimpleDateFormat"%>
<%  
   SimpleDateFormat simpleDateFormat=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
   String date=simpleDateFormat.format(new Date());
%>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>   
      <title>tomcat2</title>  
  </head>  
  <body>  
        SessionID:<%=session.getId()%>  
        <BR>  
        当前时间为:<%=date%>  
        <BR>  
        SessionPort:<%=request.getServerPort()%>  
        <BR>  
        mzd的值为:<%=session.getAttribute("mzd")%>  
       <BR>  
        <%  
        out.println("这是tomcat2");  
        %> 
  </body>  
</html> 

示例步骤:

① 1、下载:https://github.com/ran-jit/tomcat-cluster-redis-session-manager/wiki

② 解压之后。将jar包放入tomcat的lib中(注意是tomcat/lib中,不是我们自己项目的lib)

③ 配置解压之后的redis-data-cache.properties(根据你的redis配置)。配置完将这个文件放入tomcat/conf文件夹中。

④ 配置tomcat/cong/context.xml,增加如下两行。

<Valve className="tomcat.request.session.redis.SessionHandlerValve"/>
<Manager className="tomcat.request.session.redis.SessionManager"/>

注意:因为tomcat-redis-session-manager这个版本的不同,classname会随着变化,2.0.4的版本是叫这两个。(可以打开你下载的tomcat-cluster-redis-session-manager.jar看对应版本的name)

分别打开两个tomcat测试结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6TjtJtHB-1616639701139)(C:\Users\Administrator\Desktop\Image.png)]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值