云计算百科
云计算领域专业知识百科平台

Tomcat web应用服务器项目部署

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

赞(0)
未经允许不得转载:网硕互联帮助中心 » Tomcat web应用服务器项目部署
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!