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
SessionID = <%=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
SessionID = <%=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
SessionID = <%=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
在上述
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
在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
Welcome to Tomcat
Welcome to Tomcat
# 以启用会话复制功能。 其实就多了一个这个命令
修改文件权限
[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