一、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)]