说明:
通过Nginx解析静态页面并将动态负载均衡调度给后面的多个Tomcat,Tomcat解析java动态程序。

由于http是无状态的协议,你访问了页面A,然后在访问B,http无法确定这2个访问来自一个人,因此要用cookie或session来跟踪用户,根据授权和用户身份来显示不同的页面。比如用户A登陆了,那么能看到自己的个人信息,而B没登陆,无法看到个人信息。还有A可能在购物,把商品放入购物车,此时B也有这个过程,你无法确定A,B的身份和购物信息,所以需要一个session ID来维持这个过程。所以就用到了session管理。
实验用的全部工具:
链接:https://pan.baidu.com/s/1kV2xCOcncJKrQOWAWB0EzA
提取码:wewe

环境

nginx 129.204.95.233
tomcat1 106.52.23.151
tomcat2 106.52.22.151

部署memcached

[root@memcached /]# yum -y install memcached
[root@memcached /]# systemctl start memcached
[root@memcached /]# lsof -i:11211
COMMAND    PID      USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
memcached 4543 memcached   26u  IPv4  23285      0t0  TCP *:memcache (LISTEN)
memcached 4543 memcached   27u  IPv6  23286      0t0  TCP *:memcache (LISTEN)
memcached 4543 memcached   28u  IPv4  23289      0t0  UDP *:memcache 
memcached 4543 memcached   29u  IPv6  23290      0t0  UDP *:memcache 

部署nginx

安装nginx

[root@nginx /]# yum -y install nginx
[root@nginx /]# nginx -v
nginx version: nginx/1.16.1

编辑配置文件

[root@nginx /]# vim /etc/nginx/nginx.conf #添加下面两个配置
upstream tomcat {
    server 106.52.23.151:8080 weight=1;
    server 106.52.22.151:8080 weight=1;
}

location ~.*\.jsp$ {
    proxy_pass http://tomcat;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
}

请输入图片描述
请输入图片描述

编辑测试文件

[root@nginx /]# echo "<h1>Nginx IP:129.204.95.233</h1>" >> /usr/share/nginx/html/index.html
[root@nginx /]# systemctl start nginx

请输入图片描述

部署tomcat

两台tomcat服务器都要执行下面的所有操作
安装JDK

tomcat1:
[root@tomcat1 /]# yum localinstall jdk-8u211-linux-x64.rpm
[root@tomcat1 /]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

tomcat2:
[root@tomcat2 /]# yum localinstall jdk-8u211-linux-x64.rpm
[root@tomcat2 /]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

安装tomcat

tomcat1:
[root@tomcat1 /]# tar xf apache-tomcat-9.0.21.tar.gz -C /usr/local/
[root@tomcat1 /]# ln -s /usr/local/apache-tomcat-9.0.21 /usr/local/tomcat
[root@tomcat1 /]# echo "export TOMCAT_HOME=/usr/local/tomcat" >> /etc/profile
[root@tomcat1 /]# source /etc/profile

tomcat2:
[root@tomcat2 /]# tar xf apache-tomcat-9.0.21.tar.gz -C /usr/local/
[root@tomcat2 /]# ln -s /usr/local/apache-tomcat-9.0.21 /usr/local/tomcat
[root@tomcat2 /]# echo "export TOMCAT_HOME=/usr/local/tomcat" >> /etc/profile
[root@tomcat2 /]# source /etc/profile

下载memcached-session-manager等相关软件包并copy到tomcat安装目录的lib目录中

tomcat1:
[root@tomcat1 /]# mkdir we && cd we
[root@tomcat1 we]# wget http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/2.3.0/memcached-session-manager-2.3.0.jar
[root@tomcat1 we]# wget http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc9/2.3.0/memcached-session-manager-tc9-2.3.0.jar
[root@tomcat1 we]# wget http://repo1.maven.org/maven2/de/javakaffee/msm/msm-kryo-serializer/2.3.0/msm-kryo-serializer-2.3.0.jar
[root@tomcat1 we]# wget http://repo1.maven.org/maven2/net/spy/spymemcached/2.12.2/spymemcached-2.12.2.jar
[root@tomcat1 we]# wget https://repo1.maven.org/maven2/de/javakaffee/kryo-serializers/0.42/kryo-serializers-0.42.jar
[root@tomcat1 we]# wget https://repo1.maven.org/maven2/com/esotericsoftware/reflectasm/1.11.0/reflectasm-1.11.0.jar
[root@tomcat1 we]# wget https://repo1.maven.org/maven2/com/esotericsoftware/minlog/1.3.0/minlog-1.3.0.jar
[root@tomcat1 we]# wget https://repo1.maven.org/maven2/com/esotericsoftware/kryo/4.0.0/kryo-4.0.0.jar
[root@tomcat1 we]# wget https://repo1.maven.org/maven2/org/ow2/asm/asm/7.0/asm-7.0.jar
[root@tomcat1 we]# wget http://repo1.maven.org/maven2/org/objenesis/objenesis/3.0.1/objenesis-3.0.1.jar
[root@tomcat1 we]# cp ./* /usr/local/tomcat/lib/

tomcat2:
[root@tomcat2 /]# mkdir we && cd we
[root@tomcat1 we]# wget http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/2.3.0/memcached-session-manager-2.3.0.jar
[root@tomcat1 we]# wget http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc9/2.3.0/memcached-session-manager-tc9-2.3.0.jar
[root@tomcat1 we]# wget http://repo1.maven.org/maven2/de/javakaffee/msm/msm-kryo-serializer/2.3.0/msm-kryo-serializer-2.3.0.jar
[root@tomcat1 we]# wget http://repo1.maven.org/maven2/net/spy/spymemcached/2.12.2/spymemcached-2.12.2.jar
[root@tomcat1 we]# wget https://repo1.maven.org/maven2/de/javakaffee/kryo-serializers/0.42/kryo-serializers-0.42.jar
[root@tomcat1 we]# wget https://repo1.maven.org/maven2/com/esotericsoftware/reflectasm/1.11.0/reflectasm-1.11.0.jar
[root@tomcat1 we]# wget https://repo1.maven.org/maven2/com/esotericsoftware/minlog/1.3.0/minlog-1.3.0.jar
[root@tomcat1 we]# wget https://repo1.maven.org/maven2/com/esotericsoftware/kryo/4.0.0/kryo-4.0.0.jar
[root@tomcat1 we]# wget https://repo1.maven.org/maven2/org/ow2/asm/asm/7.0/asm-7.0.jar
[root@tomcat1 we]# wget http://repo1.maven.org/maven2/org/objenesis/objenesis/3.0.1/objenesis-3.0.1.jar
[root@tomcat2 we]# cp ./* /usr/local/tomcat/lib/

编辑配置文件,添加连接memcached

在<Context>和</Context>里面加上下面一段

tomcat1:
[root@tomcat1 /]# vim /usr/local/tomcat/conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:106.52.8.76:11211" 
        lockingMode="auto"
        sticky="false"
        requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$"  
        sessionBackupAsync= "false"  
        sessionBackupTimeout= "100"  
        copyCollectionsForSerialization="true"  
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

tomcat2:
[root@tomcat2 /]# vim /usr/local/tomcat/conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:106.52.8.76:11211" 
        lockingMode="auto"
        sticky="false"
        requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$"  
        sessionBackupAsync= "false"  
        sessionBackupTimeout= "100"  
        copyCollectionsForSerialization="true"  
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

准备测试文件

tomcat1:
[root@tomcat1 /]# rm -rf /usr/local/tomcat/webapps/*
[root@tomcat1 /]# mkdir /usr/local/tomcat/webapps/ROOT
[root@tomcat1 /]# vim /usr/local/tomcat/webapps/ROOT/index.jsp
SessionID:<%=session.getId()%> <BR>
SessionIP:<%=request.getServerName()%> <BR>
SessionPort:<%=request.getServerPort()%>
<br>Hello World tomcat1 106.52.23.151</br>

tomcat2:
[root@tomcat2 /]# rm -rf /usr/local/tomcat/webapps/*
[root@tomcat2 /]# mkdir /usr/local/tomcat/webapps/ROOT
[root@tomcat2 /]# vim /usr/local/tomcat/webapps/ROOT/index.jsp
SessionID:<%=session.getId()%> <BR>
SessionIP:<%=request.getServerName()%> <BR>
SessionPort:<%=request.getServerPort()%>
<br>Hello World tomcat2 106.52.22.151</br>

启动tomcat

tomcat1:
[root@tomcat1 /]# /usr/local/tomcat/bin/startup.sh
[root@tomcat1 /]# lsof -i:8080
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    8355 root   64u  IPv6  37482      0t0  TCP *:webcache (LISTEN)

tomcat2:
[root@tomcat2 /]# /usr/local/tomcat/bin/startup.sh
[root@tomcat2 /]# lsof -i:8080
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    19920 root   64u  IPv6  47857      0t0  TCP *:webcache (LISTEN)

测试

浏览器访问tomcat1和tomcat2
tomcat1:
请输入图片描述
tomcat2:
请输入图片描述
访问jsp动态程序
请输入图片描述
请输入图片描述
通过上面的访问可以看出,访问静态页面时nginx自身处理,当访问jsp动态的时候会调度给tomcat去处理。并且当一个浏览器访问后,便会一直访问这一个,so,这样就达到了session会话保持。

Last modification:October 6th, 2020 at 02:31 am
如果觉得我的文章对你有用,请随意赞赏