1.7 web部署
1.部署样式解读
Tomcat
部署应用有三种方式:
1
以文件或
war
包直接部署
将应用文件夹或
war
包文件直接复制到
tomcat
的
webapps
目录下,这样
tomcat
启动的时候会
将
webapps
目录下的文件夹或
war
文件的内容当成应用部署。这种方式最简单且无须书写任何配置文件
2
编辑
/
data
/
server
/
tomcat
/
conf
/
server.xml
配置文件,添加
Context
标签
在
tomcat
的
server.xml
配置文件中的
Host
节点下增加
Context
子节点,配置域名,文件路径等
3
在
/
data
/
server
/
tomcat
/
conf
/
[Engine]
/
[Host]
/
目录下创建独立配置
在该目录下新建
xml
文件,文件名为应用名,然后在配置文件中添加
Context
子节点,配置域名,文件路径等
2.默认首页
全局默认主页配置
[root
@rocky9-12
tomcat]
# tail -n7 conf/web.xml | head -5
<
welcome-file-list
>
<
welcome-file
>
index.html
</
welcome-file
>
<
welcome-file
>
index.htm
</
welcome-file
>
<
welcome-file
>
index.jsp
</
welcome-file
>
</
welcome-file-list
>
单独项目默认主页
[root
@rocky9-12
tomcat]
# grep -A5 '<welcome-file-list' webapps/examples/WEB-INF/web.xml
<
welcome-file-list
>
<
welcome-file
>
index.html
</
welcome-file
>
<
welcome-file
>
index.xhtml
</
welcome-file
>
<
welcome-file
>
index.htm
</
welcome-file
>
<
welcome-file
>
index.jsp
</
welcome-file
>
</
welcome-file-list
>
3.定制站点的默认主页
[root
@rocky9-12
tomcat]
# mkdir webapps/dira/WEB-INF
[root
@rocky9-12
tomcat]
# cat webapps/dira/WEB-INF/web.xml
<
?
xml version
=
"1.0"
encoding
=
"UTF-8"
?
>
<
web-app xmlns
=
"http://xmlns.jcp.org/xml/ns/javaee"
xmlns
:
xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi
:
schemaLocation
=
"http://xmlns.jcp.org/xml/ns/javaee
http
://
xmlns.jcp.org
/
xml
/
ns
/
javaee
/
web-app_4_0.xsd
"
version
=
"4.0"
metadata-complete
=
"true"
>
<
welcome-file-list
>
<
welcome-file
>
test.jsp
</
welcome-file
>
#
第一优先级
test.jsp
<
welcome-file
>
index.html
</
welcome-file
>
</
welcome-file-list
>
</
web-app
>
重启服务
[root
@rocky9-12
tomcat]
# systemctl restart tomcat
检查效果
[root
@rocky9-12
tomcat]
# curl 10.0.0.12:8080/dira/
123
4.部署web
创建文件目录
[root
@rocky9-12
~
]
# mkdir -pv /data/web/webapps/ROOT
mkdir
:
已创建目录
'/data/web'
mkdir
:
已创建目录
'/data/web/webapps'
mkdir
:
已创建目录
'/data/web/webapps/ROOT'
定制
web
页面
定制
html
的
index
页面
[root
@rocky9-12
~
]
# cat > /data/web/webapps/ROOT/index.html <<-eof
<!
DOCTYPE html
>
<
html lang
=
"en"
>
<
head
>
<
meta charset
=
"UTF-8"
>
<
meta name
=
"viewport"
content
=
"width=device-width, initial-scale=1.0"
>
<
title
>
Welcome to Tomcat
</
title
>
</
head
>
<
body
>
<
h1
>
Welcome to Tomcat by pjli
</
h1
>
</
body
>
</
html
>
eof
定制
jsp
的
index
页面
[root
@rocky9-12
~
]
# cat > /data/web/webapps/ROOT/index.jsp <<-eof
<%
@
page contentType
=
"text/html;charset=UTF-8"
language
=
"java"
%>
<!
DOCTYPE html
>
<
html lang
=
"en"
>
<
head
>
<
meta charset
=
"UTF-8"
>
<
meta name
=
"viewport"
content
=
"width=device-width, initial-scale=1.0"
>
<
title
>
Welcome to Tomcat JSP
</
title
>
</
head
>
<
body
>
<
h1
>
Welcome to Tomcat by pjli
</
h1
>
</
body
>
</
html
>
eof
修改权限
[root
@rocky9-12
~
]
# chown tomcat:tomcat /data/web/webapps -R
添加基于域名的
web
[root
@rocky9-12
~
]
# vim /data/server/tomcat/conf/server.xml
#
增加如下配置
<
Host name
=
"pjli.baidu.com"
appBase
=
"/data/web/webapps"
unpackWARs
=
"true"
autoDeploy
=
"true"
>
</
Host
>
重启服务,
[root
@rocky9-12
~
]
# systemctl restart tomcat.service
在客户端配置域名解析,并测试
[root
@rocky9-12
~
]
# echo '10.0.0.12 pjli.baidu.com' >> /etc/hosts
[root
@rocky9-12
~
]
# curl pjli.baidu.com:8080 -s | grep Tomcat
[root
@rocky9-12
~
]
# curl pjli.baidu.com:8080/index.jsp -s | grep Tomcat
效果如下:
疑:为什么浏览器出不来相应网页?
5.war包构建
准备目录
[root
@rocky9-12
~
]
# mkdir app1/dir1 -p
[root
@rocky9-12
~
]
# cp /data/web/webapps/ROOT/index.html app1/
[root
@rocky9-12
~
]
# cp /data/web/webapps/ROOT/index.jsp app1/dir1/
[root
@rocky9-12
~
]
# chown tomcat:tomcat -R app1/
创建
war
包
[root
@rocky9-12
~
]
# cd app1/
[root
@rocky9-12
app1]
# jar cvf ../app1.war *
[root
@rocky9-12
app1]
# cd ..
[root
@rocky9-12
~
]
#
如果没有
jar
命令的话,安装另外一个软件即可
yum install java-11-openjdk-devel
–
y
部署
war
包应用
[root
@rocky9-12
~
]
# rm -rf /data/web/webapps/ROOT/*
[root
@rocky9-12
~
]
# cp app1.war /data/web/webapps/
因为
tomcat
在配置
host
的时候,定制了
unpackWARs="true" –
自动解包,
autoDeploy="true" –
自动部署所以,可以看到目标目录下,的压缩文件已经展开了
浏览器访问
1.8 项目部署
1.jpress项目
简介 JPress是一个基于Java技术的开源内容发布系统,它提供了高效且简洁的博客和网站构建解决方案。官网:https://www.jpress.cn/
注意:下载的时候,需要登录,它
不支持 tomcat
10
+
版本。
1.普通方式部署
获取项目
获取代码
–
方法
1 – git
方法
mkdir
/
data
/
code
cd
/
data
/
code
git clone https
://
gitee.com
/
JPressProjects
/
jpress.git
cd
jpress
编译打包
apt install maven
mvn clean package
获取程序
–
方法
2 –
直接获取源码包
root
@ubuntu24-13:
~
# mkdir -p /data/app
root
@ubuntu24-13:
~
# cd /data/softs
[root
@rocky9-12
softs]
# ls
jpress-v5
.1.2
.tar.gz
编译文件
–
当然,也可以直接下载文件
root
@ubuntu24-13:softs
# tar xf jpress-v5.1.2.tar.gz
root
@ubuntu24-13:softs
# cd jpress-v5.1.2/
root
@ubuntu24-13:jpress-v5
.1.2
# mvn clean package #
此步时间很长,需要提前
准备
查看文件
root
@ubuntu24-13:jpress-v5
.1.2
# ls starter-tomcat/target/
classes starter-tomcat-5
.0
starter-tomcat-5
.0
.war
maven-archiver starter-tomcat-5
.0
–
classes.jar
root
@ubuntu24-13:jpress
# ls starter/target/
archive-tmp generated-sources maven-archiver starter-5
.0
starter-5
.0
.zip
classes generated-test-sources maven-status starter-5
.0
.jar test-classes
手动运行项目
修改配置
root
@ubuntu24-13:
~
# cd /data/code/jpress/starter/target/starter-5.0
root
@ubuntu24-13:starter-5
.0
# vim jpress.sh
#
取消下行注释
JAVA_OPTS
=
"-Dundertow.port=80 -Dundertow.host=0.0.0.0 -Dundertow.devMode=false"
启动服务
root
@ubuntu24-13:starter-5
.0
# ./jpress.sh start
..
.
Server running on
:
>
Local
:
http
://
localhost
:
80
>
Network
:
http
://
192.168.8.124
:
80
>
Network
:
http
://
192.168.8.128
:
80
>
Network
:
http
://
10.0.0.105
:
80
>
Network
:
http
://
10.0.0.13
:
80
JbootResourceLoader is started, and watching resource
dir
:
webapp
检测服务端口
root
@ubuntu24-13:starter-5
.0
# netstat -tnulp | grep java
tcp6
0
0
:::
80
:::*
LISTEN
13706
/
java
浏览器效果
略
查看终端日志
root
@ubuntu24-13:starter-5
.0
# ./jpress.sh start
。。。。
关闭服务
root
@ubuntu24-13:starter-5
.0
# ./jpress.sh stop
2.war方式部署
部署程序
root
@ubuntu24-13:
~
# cd /data/code/jpress/starter-tomcat/target
root
@ubuntu24-13:target
# ls
classes maven-archiver starter-tomcat-5
.0
starter-tomcat-5
.0
–
classes.jar starter-tomcat-5
.0
.war
转移文件
root
@ubuntu24-13:target
# mkdir /data/app/jpress -p
root
@ubuntu24-13:target
# cp starter-tomcat-5.0.war /data/app/jpress/ROOT.war
root
@ubuntu24-13:target
# chown tomcat:tomcat -R /data/app/jpress
root
@ubuntu24-13:target
# ll /data/app/jpress/
总计
125352
drwxr-xr-x
2
tomcat tomcat
4096 5
月
21 00
:
05
.
/
drwxr-xr-x
3
root root
4096 5
月
21 00
:
01
../
–
rw-r–r
—
1
tomcat tomcat
128350601 5
月
21 00
:
05
ROOT.war
转移配置文件
root@ubuntu24-13:target# cp classes/* /data/server/tomcat/conf/
定制配置
添加配置
root
@ubuntu24-13:
~
# vim /data/server/tomcat/conf/server.xml
..
.
#
更改
appBase
的属性路径为
jpress
的路径
<
Host name
=
"localhost"
appBase
=
"/data/app/jpress"
unpackWARs
=
"true"
autoDeploy
=
"true"
>
重启服务
root
@ubuntu24-13:
~
# systemctl restart tomcat
查看文件包
root
@ubuntu24-13:
~
# ls /data/app/jpress/
ROOT ROOT.war
确认端口效果
root
@ubuntu24-13:
~
# netstat -tnulp |grep java
tcp6
0
0
:::
8080
:::*
LISTEN
14207
/
java
tcp6
0
0 127.0.0.1
:
8005
:::*
LISTEN
14207
/
java
浏览器访问 10.0.0.13:8080
3.数据库环境
安装
mysql
root
@ubuntu24-13:
~
# apt install mariadb-server -y
修改配置
root
@ubuntu24-13:
~
# vim /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address
=
0.0.0.0
启动服务
root
@ubuntu24-13:
~
# systemctl restart mariadb.service
检查效果
root
@ubuntu24-13:
~
# netstat -tnulp | grep 3306
tcp
0
0 0.0.0.0
:
3306
0.0.0.0
:*
LISTEN
7343
/
mariadbd
mysql
数据库创数据库,创建用户并授权
root
@ubuntu24-13:
~
# mysql
MariaDB [(none)]
>
create database jpress;
Query OK,
1
row affected (
0.000
sec)
MariaDB [(none)]
>
CREATE USER
'jpresser'
@'localhost
';
Query OK,
0
rows affected (
0.002
sec)
MariaDB [(none)]
>
ALTER USER
'jpresser'
@'localhost
' IDENTIFIED BY '
123456
';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]
>
grant all on jpress.
*
to jpresser
@'localhost
';
Query OK,
0
rows affected (
0.001
sec)
MariaDB [(none)]
>
exit
Bye
数据库配置完毕后,继续进行后续操作
设置账号密码等
并将账号密码登录在下面
最终效果
2. halo 项目
1.简介
Halo
由
manrajgrover
等人创建并维护,是一个现代化的开源博客系统,而且它提供了丰富的功能和活的定制选项,允许用户快速搭建并管理各种类型的网站。所以它是一个旨在为开发者提供一个易于使用且功能强大的平台,用于创建和管理个人或团队的博客、网站或内容管理系统。
获取文件
root
@ubuntu24-13:
~
# mkdir /data/halo ;cd /data/halo
root
@ubuntu24-13:halo
# wget https://dl.halo.run/release/halo-1.6.1.jar -O halo.jar (注:链接地址可能不稳定导致404)
root
@ubuntu24-13:halo
# ls
halo.jar
启动项目
root
@ubuntu24-13:halo
# java -jar halo.jar
__ __ __
Halo has started successfully
!
#
启动成功的标识符
检查端口
root
@ubuntu24-13:
~
# netstat -tnulp | grep java
tcp6
0
0
:::
8090
:::*
LISTEN
14532
/
java
浏览器访问
10.0.0.13
:
8090
1.9 进阶实践
1.常见部署方式
关于
tomcat
的部署样式,除了我们之前站在
tomcat
本身的角度,所说的
java
–
jar
、
war
包、
java
字节码等方式的部署样式,其实,更多的情况下,我们是将
tomcat
结合其他的软件解决方案来实现的项目架构级别的部署,这些部署样式如下。
2.部署tomcat应用
简介
在同一台服务器上部署
Nginx
和
Tomcat
,
Nginx
监听
80
端口,将请求转发至后端
Tomcat
的
8080
端口进行处理。
准备
tomcat
的应用配置
[root
@rocky9-12
~
]
# tree /data/web/webapps
/
data
/
web
/
webapps
└──
ROOT
├──
index.html
└──
index.jsp
1
directory,
2
files
如果不是上面的效果的话,按照如下命令执行
cd
/
data
/
web
/
webapps
/
mv
app1
/
index.html ROOT
/
mv
app1
/
dir1
/
index.jsp ROOT
/
rm
–
rf app1
*
[root
@rocky9-12
~
]
# vim /data/server/tomcat/conf/server.xml
#
修改端口为
8080
<
Connector port
=
"8080"
protocol
=
"HTTP/1.1"
..
.
..
.
#
增加如下配置
<
Host name
=
"pjli.baidu.com"
appBase
=
"/data/web/webapps"
unpackWARs
=
"true"
autoDeploy
=
"true"
>
</
Host
>
重启服务,
[root
@rocky9-12
~
]
# systemctl restart tomcat.service
测试效果
[root
@rocky9-12
~
]
# curl 10.0.0.12:8080/index.jsp -s | grep Tomcat
[root
@rocky9-12
~
]
# curl -H "Host: pjli.baidu.com" 10.0.0.12:8080/index.jsp -s | grep Tomcat
结果显示:
使用
ip
地址无法访问,但是携带主机头就可以进行正常的访问。
2.0 反向代理
1.nginx反向代理Tomcat
安装nginx yum install nginx -y
vim /etc/nginx/conf.d/vhost.conf
server {
# 监听80端口,负责接收HTTP请求
listen 80;
# 指定该虚拟主机的域名,只有当客户端请求的域名是 pjli.baidu.com 时,此配置才会起作用
server_name pjli.baidu.com;
# 匹配所有路径的请求
location / {
# 将请求代理转发到本地的 8080 端口,也就是Tomcat服务器所在的端口
proxy_pass http://127.0.0.1:8080;
# 设置请求头中的 host 字段为客户端请求的原始 host,这样后端服务器可根据原始域名进行处理
proxy_set_header host $http_host;
}
# 使用正则表达式匹配以 .jsp 结尾的请求
location ~* \\.jsp$ {
# 同样将以 .jsp 结尾的请求代理转发到本地的 8080 端口
proxy_pass http://127.0.0.1:8080;
# 设置请求头中的 host 字段为客户端请求的原始 host
proxy_set_header host $http_host;
}
}
检测
nginx
配置
[root
@rocky9-12
~
]
# nginx -t
重启
nginx
服务
[root
@rocky9-12
~
]
# systemctl restart nginx.service
定制主机名解析
[root
@rocky9-12
~
]
# echo '10.0.0.12 pjli.baidu.com' >> /etc/hosts
访问测试
[root
@rocky9-12
~
]
# curl pjli.baidu.com -s | grep Tomcat (即用80端口访问成功)
…
[root
@rocky9-12
~
]
# curl pjli.baidu.com/index.jsp -s | grep Tomcat (即用80端口访问成功)
…
遇到的疑惑趣事儿:
nginx -t 和 systemctl restart nginx 都没问题,结果出现下面的报错 其实是复制的时候格式问题。
后面用AI更新了一下vhost.conf文件里面的格式恢复正常。
2.项目实施与解读
定制一个
nginx
反向代理多个
tomcat
应用实例的效果。
1.Rocky9部署Tomcat
直接套用现在的
Tomcat
环境即可,修改
tomcat
的配置
[root
@rocky9-12
~
]
# vim /data/server/tomcat/conf/server.xml
<
Host name
=
"rocky9.baidu.com"
appBase
=
"/data/web/webapps"
unpackWARs
=
"true"
autoDeploy
=
"true"
>
<
Valve className
=
"org.apache.catalina.valves.AccessLogValve"
directory
=
"logs"
prefix
=
"localhost_access_log"
suffix
=
".txt"
pattern
=
"%h %l %u %t "%r" %s %b %{x-forwarded-for}i"
/>
重启服务
[root
@rocky9-12
~
]
# systemctl restart tomcat
启动
tomcat
并测试
[root
@rocky9-12
~
]
# curl localhost:8080 (无法访问)
注意:
如果无法看到效果,可以设定域名主机为默认
Host
,或者
curl
使用
–
H
"Host: rocky9.baidu.com"
携带主机名头部进行访问
[root@rocky9-12 ~]# curl rocky9.baidu.com:8080 (访问正常)
2.ubuntu24部署Tomcat
部署
java
应用
root
@ubuntu24:
~
# apt install openjdk-11-jdk -y
部署
tomcat
应用
root
@ubuntu24:
~
# apt install tomcat10 -y
修改
tomcat
配置
root
@ubuntu24:
~
# vim /etc/tomcat10/server.xml
<
Host name
=
"ubuntu24.baidu.com"
appBase
=
"webapps"
unpackWARs
=
"true"
autoDeploy
=
"true"
>
<
Valve className
=
"org.apache.catalina.valves.AccessLogValve"
directory
=
"logs"
prefix
=
"localhost_access_log"
suffix
=
".txt"
pattern
=
"%h %l %u %t "%r" %s %b %{x-forwarded-for}i"
/>
定位
tomcat
首页
root
@ubuntu24:
~
# echo 'ubuntu24 Tomcat' >
/var/lib/tomcat10/webapps/ROOT/index.html
启动并测试
重启
tomcat
root
@ubuntu24:
~
# systemctl restart tomcat10.service
测试效果
root
@ubuntu24:
~
# curl localhost:8080
ubuntu24 Tomcat
注意:
如果无法看到效果,可以设定域名主机为默认
Host
,或者
curl
使用
–
H
"Host: ubuntu24.baidu.com"
携带主机名头部进行访问
3.openEuler部署Tomcat
基础软件部署
部署
java
应用
[root
@openeuler-14
~
]
# yum install java-11-openjdk -y
部署
tomcat
应用
[root
@openeuler-14
~
]
# yum install tomcat -y
定制配置文件
修改
tomcat
配置
[root
@openeuler-14
~
]
# vim /usr/share/tomcat/conf/server.xml
<
Host name
=
"openeuler.magedu.com"
appBase
=
"webapps"
unpackWARs
=
"true"
autoDeploy
=
"true"
>
<
Valve className
=
"org.apache.catalina.valves.AccessLogValve"
directory
=
"logs"
prefix
=
"localhost_access_log"
suffix
=
".txt"
pattern
=
"%h %l %u %t "%r" %s %b %{x-forwarded-for}i"
/>
定制首页
[root
@openeuler-14
~
]
# echo 'openeuler tomcat' >
/usr/share/tomcat/webapps/ROOT/index.jsp
4.nginx环境配置
[root
@rocky9-12
~
]
# vim /etc/nginx/conf.d/vhost.conf
# 定义名为rocky9的上游服务器组,其中包含一个后端服务器(同下解释)
upstream rocky9 {
server 10.0.0.12:8080;
}
upstream ubuntu24 {
server 10.0.0.13:8080;
}
upstream openeuler14 {
server 10.0.0.14:8080;
}
# 第一个虚拟主机配置,处理rocky9.baidu.com的请求
server {
# 监听80端口,接收HTTP请求
listen 80;
# 指定该虚拟主机对应的域名
server_name rocky9.baidu.com;
# 匹配所有路径的请求
location / {
# 将请求代理转发到名为rocky9的上游服务器组
proxy_pass http://rocky9;
# 设置请求头中的host字段为客户端请求的原始host
proxy_set_header host $http_host;
# 设置请求头中的X-Forwarded-For字段,记录客户端的真实IP地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# 第二个虚拟主机配置,处理ubuntu24.baidu.com的请求
server {
listen 80;
server_name ubuntu24.baidu.com;
location / {
proxy_pass http://ubuntu24;
proxy_set_header host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# 第三个虚拟主机配置,处理openeuler14.baidu.com的请求
server {
listen 80;
server_name openeuler14.baidu.com;
location / {
proxy_pass http://openeuler;
proxy_set_header host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
定制域名
[root
@rocky9-12
~
]
# echo '10.0.0.12 rocky9.baidu.com ubuntu24.baidu.com
openeuler14.baidu.com' >> /etc/hosts
测试效果
3. https反向代理
1.rocky9系统定制tomcat域名
修改配置文件 在host配置段内部增加
[root
@rocky9-12
~
]
# vim /data/server/tomcat/conf/server.xml
<
Host name
=
"pjli.baidu.com"
appBase
=
"/data/web/webapps"
unpackWARs
=
"true"
autoDeploy
=
"true"
>
</
Host
>
[root
@rocky9-12 3]#
echo
'Tomcat jsp page from rocky9<br />SessionID = <span style="color:blue"><%=session.getId() %>'
> /data/web/webapps/ROOT/test.jsp
2.ubuntu系统定制tomcat域名
root
@ubuntu24:
~
# vim /etc/tomcat10/server.xml
#
修改主机名
<
Host name
=
"pjli.baidu.com"
appBase
=
"webapps"
unpackWARs
=
"true"
autoDeploy
=
"true"
>
定制
test.jsp
文件
root
@ubuntu24:
~
# echo
'Tomcat jsp page from ubuntu<br />SessionID = <span style="color:blue"><%=session.getId() %>'
> /var/lib/tomcat10/webapps/ROOT/test.jsp
3.OpenEuler系统定制tomcat域名
增加
Cluster
配置属性
[root
@openeuler-14
~
]
# vim /usr/share/tomcat/conf/server.xml
#
修改为同一个域名
<
Host name
=
"pjli.baidu.com"
appBase
=
"webapps"
unpackWARs
=
"true"
autoDeploy
=
"true"
>
定制
test.jsp
文件
[root
@openeuler-14
~
]
# echo
'Tomcat jsp page from openeuler<br />SessionID = <span style="color:blue"><%=session.getId() %>'
> /var/lib/tomcat/webapps/ROOT/test.jsp
4.定制CA证书
https定制
安装软件
[root
@rocky9-12
~
]
# yum install easy-rsa -y
注意:该软件依赖于
epel-release
源
初始化环境
[root
@rocky9-12
~
]
# cd /usr/share/easy-rsa/3
[root
@rocky9-12
3
]
# ./easyrsa init-pki
生成CA机构证书
[root
@rocky9-12
3
]
# ./easyrsa
build-ca nopass
。。。。。。
Common Name (eg
:
your user, host, or server name) [Easy-RSA CA]
:baidu
#
输入baidu
#
这里仅仅做个演示 我是想用rocky9.baidu.com申请 所以写的是baidu
。。。。。。
生成私钥和证书申请者文件
[root
@rocky9-12
3
]
# ./easyrsa
gen-req
rocky9.baidu.com
nopass
。。。。。。
Common Name (eg
:
your user, host, or server name) [rocky9.baidu.com]
:
#
直接Enter
。。。。。。
Private-Key and Public-Certificate-Request files created.
Your files are
:
*
req
: /
usr
/
share
/
easy-rsa
/
3
/
pki
/
reqs
/
rocky9.baidu.com.req #生成的申请者文件
*
key
: /
usr
/
share
/
easy-rsa
/
3
/
pki
/
private
/
rocky9.baidu.com.key #生成的私钥文件
签发证书
[root
@rocky9-12
3
]
# ./easyrsa
sign-req server
rocky9.baidu.com
。。。。。。
Confirm request details
:
yes
#
输入
yes
。。。。。。
合并(
服务器证书签发机构证书为一个文件,注意顺序
)
[root
@rocky9-12
3
]
#cat
pki/issued/rocky9.baidu.com.crt pki/ca.crt
>pki/rocky9.baidu.com.pem
给私钥加读权限
[root
@rocky9-12
3
]
# chmod +r pki/private/rocky9.baidu.com.key
4.nginx实现https
[root@rocky9-12 ~]# vim /etc/nginx/conf.d/vhost.conf
upstream tomcat {
# ip_hash;
# hash $cookie_JSESSION consistent;
# hash $remote_addr; # 三选一可以实现会话保持功能
server 10.0.0.12:8080;
server 10.0.0.13:8080;
server 10.0.0.14:8080;
}
#HTTP 重定向
server {
listen 80;
server_name rocky9.baidu.com;
return 302 https://$host$request_uri;
}
#HTTPS 处理
server {
listen 443 ssl;
server_name rocky9.baidu.com;
ssl_certificate /usr/share/easy-rsa/3/pki/sswang.magedu.com.pem;
ssl_certificate_key /usr/share/easy-rsa/3/pki/private/sswang.magedu.com.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
location ~* \\.jsp$ {
proxy_pass http://tomcat;
proxy_set_header host $http_host;
}
}
未开启会话保持的状态
开启会话保持的状态
注意:
虽然访问的是同一个后端,但是并不是同一个会话
话说上面那些怎么可以在浏览器上查看 各位有知道的吗?
2.1 会话实践
当前时间 2025年5月6日14:57:36
Session
集群
在上述
Nginx
代理多机
Tomcat
的架构中,我们在
Nginx
代理节点通过调度算法实现会话绑定,将
来自于同一客户端的请求调度到同相的后端服务器上,在这种情况下,如果后端
Tomcat
服务不可用,
Nginx
在检测后会将请求调度到可用的后端节点,则原来的
Session
数据还是会丢失。
Apache Tomcat 9 (9.0.104) – Clustering/Session Replication How-To
添加一个集群
将里面的auto改成对应的ip主机地址 然后就能找到4000端口了 具体可以看下面的操作
1. Rocky9主机配置tomcat10会话集群
修改配置文件 在host配置段内部增加配置
[root@rocky9-12 ~]# vim /data/server/tomcat/conf/server.xml
<Host name="pjli.baidu.com" appBase="/data/web/webapps"
unpackWARs="true" autoDeploy="true">
<!– 在 server.xml 中 指定域名的 Host 标签内添加下列内容 –>
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership
className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4" port="45564" frequency="500"
dropTime="3000"/>
<Receiver
className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="10.0.0.12" port="4000" autoBind="100"
selectorTimeout="5000" maxThreads="6"/>
<Sender
className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport
className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor
className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor
className="org.apache.catalina.tribes.group.interceptors.MessageDispatchIntercep
tor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve
className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/" watchEnabled="false"/>
<ClusterListener
className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
</Host>
在web.xml文件末尾增加如下内容,注意:ROOT 下面的目录名字是 WEB-INF
启用会话复制
[root@rocky9-12 ~]# mkdir /data/web/webapps/ROOT/WEB-INF
[root@rocky9-12 ~]# cat /data/web/webapps/ROOT/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0" metadata-complete="true">
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<distributable /> # 以启用会话复制功能。 其实就多了一个这个命令
</web-app>
修改文件权限
[root@rocky9-12 ~]# chown tomcat:tomcat -R /data/web/webapps/ROOT/WEB-INF
[root@rocky9-12 ~]# chown tomcat:tomcat -R /data/server/tomcat/
重启tomcat服务
[root@rocky9-12 ~]# systemctl restart tomcat.service
测试效果
[root@rocky9-12 ~]# ss -tnlp | grep 4000
LISTEN 0 50 [::ffff:10.0.0.12]:4000 *:* users:
(("java",pid=3338,fd=48))
2.ubuntu24主机配置tomcat10会话集群

图像 小部件
tomcat如果涉及到xx功能的开启和禁用 权限属性 上下文 META_INF/context.xml
如果涉及到项目的功能 WEB_INFO/web.xml
3.OpenEuler主机配置tomcat9会话集群
图像 小部件
[root@openeuler-14 ~]# vim /usr/share/tomcat/webapps/ROOT/WEB-INF/web.xml
方法1:tomcat会话复制:
1 tomcat server.xml 同步的配置 2 tomcat web.xml 开启同步功能 3 重启tomcat
方法2:nginx的会话保持功能设置:
# ip_hash;
# hash $cookie_JSESSION consistent;
# hash $remote_addr; 三选一可以实现会话保持功能
方法3:会话共享:
memcache
redis
redisson
4.Rocky9主机配置nginx反向代理
定制nginx配置
[root@rocky9-12 ~]# cat /etc/nginx/conf.d/vhost.conf
upstream tomcat {
# hash $remote_addr;
server 10.0.0.12:8080;
server 10.0.0.13:8080;
server 10.0.0.14:8080;
}
server{
listen 80;
server_name rocky9.baidu.com;
return 302 https://$host$request_uri;
}
server{
listen 443 ssl;
server_name rocky9.baidu.com;
ssl_certificate /usr/share/easy-rsa/3/pki/rocky9.baidu.com.pem;
ssl_certificate_key /usr/share/easyrsa/3/pki/private/rocky9.baidu.com.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
location ~* \\.jsp$ {
proxy_pass http://tomcat;
proxy_set_header host $http_host;
}
}
nginx 环境测试
[root@rocky9-12 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx服务重启
[root@rocky9-12 ~]# systemctl restart nginx
curl测试每次都是一个session的值
[root@rocky9-12 ~]# curl https://rocky9.baidu.com/test.jsp -k -I
评论前必须登录!
注册