day41-动静分离
1.每日复盘与今日内容
1.1复盘
- 部署、安装、配置tomcat(systemctl)
- Tomcat主配置文件
- 部署静态页
- 部署zrlog🍟🍟🍟🍟🍟
- 接入负载均衡
- 挂载到NFS
1.2今日内容
- Tomcat会话保持
- java运行jar包、nginx前端页面
- nginx动静分离实践🍟🍟🍟🍟🍟
- pc端和移动端分离🍟🍟🍟🍟🍟
2.Tomcat部署证书(了解)
详情见:
在Tomcat服务器安装SSL证书(Linux)_数字证书管理服务(原SSL证书)(SSL Certificate)-阿里云帮助中心
3.Tomcat会话保持(一般不用自带的)
第一步:配置web01-tomcat实现获取当前的session id
第二步:配置web02-tomcat实现获取当前的session id
第三步:接入负载均衡,浏览器访问session会一直跳
第四步:部署redis
第五步:将会话写入到redis、负载测试
#第一步: 配置web01
[root@web01 ~]# cd /soft/tomcat/conf/
[root@web01 conf]# vim server.xml
...<Host name="session.oldboy.com" appBase="/session/"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="session" suffix=".log"pattern="%h %l %u %t "%r" %s %b" /></Host>
...[root@web01 conf]# systemctl restart tomcat
[root@web01 conf]# netstat -tnulp
tcp6 0 0 :::8080 :::* LISTEN 22140/java [root@web01 conf]# mkdir /session/ROOT
[root@web01 conf]# cat /session/ROOT/index.jsp
<body><%//HttpSession session = request.getSession(true);System.out.println(session.getCreationTime());out.println("<br> web01 SESSION ID:" + session.getId() + "<br>");out.println("Session created time is :" + session.getCreationTime()+ "<br>");%>
</body>windows修改
10.0.0.7 session.oldboy.com浏览器测试访问
#WEB02配置获取session id 页面
[root@web02 ~]# cd /soft/tomcat/conf/
[root@web02 conf]# vim server.xml
...<Host name="session.oldboy.com" appBase="/session/"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="session" suffix=".log"pattern="%h %l %u %t "%r" %s %b" /></Host>
...
[root@web02 conf]# systemctl restart tomcat
[root@web02 conf]# mkdir /session/ROOT
[root@web02 conf]# cat /session/ROOT/index.jsp
<body><%//HttpSession session = request.getSession(true);System.out.println(session.getCreationTime());out.println("<br> WEB2 SESSION ID:" + session.getId() + "<br>");out.println("Session created time is :" + session.getCreationTime()+ "<br>");%>
</body>浏览器访问测试
10.0.0.8 session.oldboy.com
负载均衡配置
[root@lb01 conf.d]# cat se.conf
upstream se {server 172.16.1.7:8080;server 172.16.1.8:8080;
}
server {listen 80;server_name session.oldboy.com;location / {proxy_pass http://se;proxy_set_header Host $http_host;}
}
[root@lb01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01 conf.d]# systemctl restart nginx浏览器访问测试
10.0.0.5 session.oldboy.com刷新浏览器每次session id都会变化。#部署Redis
10.0.0.51
yum -y install redis
[root@db01 ~]# grep 172.16.1.51 /etc/redis.conf
..
bind 127.0.0.1 172.16.1.51
requirepass 123456
...systemctl start redis#上传redis插件
下载github: wget https://github.com/ran-jit/tomcat-cluster-redis-session-manager/releases/download/4.0/tomcat-cluster-redis-session-manager.zip#上传zip包
[root@web01 ~]# ll
total 900
-rw-r--r-- 1 root root 921429 Aug 25 09:26 tomcat-cluster-redis-session-manager.zip
1.#解压
[root@web01 ~]# unzip tomcat-cluster-redis-session-manager.zip#配置插件修改默认的会话写入到redis
2.拷贝jars到tomcat的/lib目录中
[root@web01 ~]# cp tomcat-cluster-redis-session-manager/lib/* /soft/tomcat/lib/3.拷贝conf下的redis.properties文件,到tomcat的conf文件
[root@web01 ~]# cp tomcat-cluster-redis-session-manager/conf/redis-data-cache.properties /soft/tomcat/conf/4.将配置文件中连接redis地址修改为如下地址即可
[root@web01 ~]# vim /soft/tomcat/conf/redis-data-cache.properties
redis.hosts=172.16.1.51:6379
redis.password=1234565.添加如下两行至tomcat/conf/context.xml (添加在</Context> 上一行 )
[root@web01 ~]# vim /soft/tomcat/conf/context.xml
<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager" />#同步给WEB02
[root@web01 ~]# scp -r /soft/tomcat/ 10.0.0.8:/soft/
注意: 修改完一台直接和另外一台进行无差异同步rsync --delete
修改完成后重启Tomcat
systemctl restart tomcat#浏览器测试访问 session.oldboy.com session不会发生变化
- 刷新一下
配置完redis后,发现session不会发生变化
4.java运行jar包
java代码编译后:
war包: 基于Tomcat运行
jar包: 部署运行环境JDK 命令行运行jar包 内嵌了轻量的tomcat
#第一步,部署运行环境JDK
[root@web02 ~]# rpm -qa |grep jdk
jdk1.8-1.8.0_181-fcs.x86_64#第二步,下载代码(jar包)
#通过页面管理nginx的项目
https://gitee.com/cym1102/nginxWebUI/ #创建存放jar包的目录
[root@web02 ~]# mkdir /home/nginxWebUI/
#下载jar包
[root@web02 ~]# wget -O /home/nginxWebUI/nginxWebUI.jar https://gitee.com/cym1102/nginxWebUI/releases/download/4.1.9/nginxWebUI-4.1.9.jar#关闭tomcat
systemctl stop tomcat#运行jar包
[root@web02 ~]# nohup java -jar -Dfile.encoding=UTF-8 /home/nginxWebUI/nginxWebUI.jar --server.port=8080 --project.home=/home/nginxWebUI/ > /dev/null &#输入用户名密码
用户名:admin
密码:Lidao996#企业如果连接数据、需要添加数据库的启动参数
nohup java -jar -Dfile.encoding=UTF-8 /home/nginxWebUI/nginxWebUI.jar --server.port=8080 --project.home=/home/nginxWebUI/ --spring.datasource.url=172.16.1.51 --spring.datasource.username=root --spring.datasource.password=pass> /dev/null &#最后将启动方式写入脚本
[root@web02 ~]# cat start_nginx_ui.sh
nohup java -jar -Dfile.encoding=UTF-8 /home/nginxWebUI/nginxWebUI.jar --server.port=8080 --project.home=/home/nginxWebUI/ &>/dev/null &
[root@web02 ~]# cat stop_web_ui.sh
ps axu|grep jar|grep -v grep|awk '{print $2}'|xargs kill -9
5.动静分离实践
- 单台
#第一步: 保证web01的tomcat正常访问的#第二步: 接入负载均衡、通过负载均衡访问web01的tomcat
[root@lb01 conf.d]# cat tom.conf
upstream toms {server 172.16.1.7:8080;
}
server {listen 80;server_name www.tom.com;location / {proxy_pass http://toms;proxy_set_header Host $http_host;}location ~ \.(png|svg|avi|jpeg)$ {root /code/image;}}[root@lb01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01 conf.d]# systemctl restart nginxwindows解析
10.0.0.5 www.tom.com
#负载均衡创建图片目录
[root@lb01 conf.d]# mkdir /code/image -p
#将tomcat下的静态资源拷贝到/code/image
[root@lb01 conf.d]# cd /code/image/
[root@lb01 image]# scp 10.0.0.7:/soft/tomcat/webapps/ROOT/* .
#删除其他的资源 只留下静态资源
[root@lb01 image]# rm -rf favicon.ico index.jsp RELEASE-NOTES.txt tomcat.css
[root@lb01 image]# ll
total 112
-rw-r----- 1 root root 27235 Aug 25 11:20 asf-logo-wide.svg
-rw-r----- 1 root root 713 Aug 25 11:20 bg-button.png
-rw-r----- 1 root root 1918 Aug 25 11:20 bg-middle.png
-rw-r----- 1 root root 1401 Aug 25 11:20 bg-nav.png
-rw-r----- 1 root root 3103 Aug 25 11:20 bg-upper.png
-rw-r----- 1 root root 67795 Aug 25 11:20 tomcat.svg#修改静态资源的属主属组
[root@lb01 conf.d]# chown -R nginx.nginx /code/image/ #此时是51上的nginx用户
[root@lb01 conf.d]# ll /code/image/
total 112
-rw-r----- 1 nginx nginx 27235 Aug 25 11:20 asf-logo-wide.svg
-rw-r----- 1 nginx nginx 713 Aug 25 11:20 bg-button.png
-rw-r----- 1 nginx nginx 1918 Aug 25 11:20 bg-middle.png
-rw-r----- 1 nginx nginx 1401 Aug 25 11:20 bg-nav.png
-rw-r----- 1 nginx nginx 3103 Aug 25 11:20 bg-upper.png
-rw-r----- 1 nginx nginx 67795 Aug 25 11:20 tomcat.svg
- 多台
#WEB01创建静态页面
[root@web01 conf.d]# cat s.conf
server {listen 80;server_name www.tom.com;location / {root /code;index index.html;}
}
[root@web01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 conf.d]# systemctl restart nginx
[root@web01 conf.d]# ll /code/
31.png index.html test/ zh/
admin/ info.php tt/ zrlog/
dia/ mysql.php wordpress/
diy/ she/ wordpress-6.0-zh_CN.tar.gz
[root@web01 conf.d]# ll /code/1.jpg
-rw-r--r-- 1 root root 296356 Aug 13 10:51 /code/1.jpg#windows解析测试
10.0.0.7 www.tom.com
#web02部署动态随机数页面
[root@web02 conf]# cat server.xml
...<Host name="www.tom.com" appBase="/session/"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="session" suffix=".log"pattern="%h %l %u %t "%r" %s %b" /></Host>
...
[root@web02 session]# cd
[root@web02 ~]# cd /session/ROOT/
[root@web02 ROOT]# ll
total 4
-rw-r--r-- 1 root root 290 Aug 25 09:16 index.jsp
[root@web02 ROOT]# vim index.jsp # 原来的内容删除、粘贴下面的内容
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<HTML><HEAD><TITLE>oldboy JSP Page</TITLE></HEAD><BODY><%Random rand = new Random();out.println("<h1>oldboy随机数:<h1>");out.println(rand.nextInt(99)+100);%></BODY>
</HTML>[root@web02 ROOT]#
[root@web02 ROOT]# systemctl restart tomcat#windows解析测试
10.0.0.8 www.tom.com#别忘记开启51
#负载均衡集成后端的静态和动态资源
修改nginx配置文件
[root@lb01 conf.d]# cat tom.conf
upstream static {server 172.16.1.7:80;
}
upstream java {server 172.16.1.8:8080;
}
server {listen 80;server_name www.tom.com;root /code;index index.html;location ~* \.(jpg|png|gif)$ {proxy_pass http://static;proxy_set_header Host $http_host;}location ~ \.jsp {proxy_pass http://java;proxy_set_header Host $http_host;}}
[root@lb01 conf.d]# systemctl restart nginx[root@lb01 conf.d]# cat /code/index.html
<html lang="en"><head><meta charset="UTF-8" /><title>测试ajax和跨域访问</title><script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script></head><script type="text/javascript">$(document).ready(function(){$.ajax({type: "GET",url: "http://www.tom.com/index.jsp",success: function(data){$("#get_data").html(data)},error: function() {alert("哎呦喂,失败了,回去检查你服务去~");}});});</script><body><h1>测试动静分离</h1><img src="http://www.tom.com/1.jpg"><div id="get_data"></div></body>
</html>windows解析测试
10.0.0.5 www.tom.com
停掉web01--nginx
systemctl stop nginx.service
开启web01,关闭web02--tomcat
6.PC端和移动端分离
Nginx通过负载均衡实现手机与PC调度至不通的后端节点应用案例系统版本 主机角色 外网IP 内网IP 提供端口
kylin 负载均衡 10.0.0.5 172.16.1.5 80
kylin 提供Android页面 172.16.1.7 9090
kylin 提供Iphone页面 172.16.1.7 9091
kylin 提供pc页面 172.16.1.7 9092
#WEB01配置静态资源
[root@web01 conf.d]# cat s.conf
charset utf-8,gbk;
server {listen 9090;server_name m.oldboy.com;location / {root /code/9090;index index.html;}
}
server {listen 9091;server_name m.oldboy.com;location / {root /code/9091;index index.html;}
}
server {listen 9092;server_name m.oldboy.com;location / {root /code/9092;index index.html;}
}[root@web01 conf.d]# mkdir /code/9090
[root@web01 conf.d]# mkdir /code/9091
[root@web01 conf.d]# mkdir /code/9092[root@web01 conf.d]# echo 提供Android页面 > /code/9090/index.html
[root@web01 conf.d]# echo 提供Iphone页面 > /code/9091/index.html
[root@web01 conf.d]# echo 提供pc页面 > /code/9092/index.html[root@web01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 conf.d]# systemctl restart nginxwindows解析
10.0.0.7 m.oldboy.com
#负载均衡配置
[root@lb01 conf.d]# cat m.conf
upstream android {server 172.16.1.7:9090;
}upstream iphone {server 172.16.1.7:9091;
}upstream pc {server 172.16.1.7:9092;
}server {listen 80;server_name m.oldboy.com;charset 'utf-8';location / {#如果客户端来源是Android则跳转到Android的资源;if ($http_user_agent ~* "Android") {proxy_pass http://android;}#如果客户端来源是Iphone则跳转到Iphone的资源;if ($http_user_agent ~* "Iphone") {proxy_pass http://iphone;}#如果客户端是IE浏览器则返回403错误;if ($http_user_agent ~* "MSIE") {return 403;}#默认跳转pc资源;proxy_pass http://pc;}
}[root@lb01 conf.d]# systemctl restart nginxwindows解析到10.0.0.5
10.0.0.5 m.oldboy.com
点击F12,点击此可以切换设备访问
7.今日总结
- Tomcat会话保持
- java运行jar包、nginx前端页面
- nginx动静分离实践🍟🍟🍟🍟🍟
- pc端和移动端分离🍟🍟🍟🍟🍟