关于 Tomcat 安装部分,请参考:在 ubuntu 22.04 中,通过二进制安装 Tomcat 服务

注意:以下操作都是在 root 用户下执行。

创建 web 目录

1.在 /usr/local/tomcat/webapps 目录下创建 2 个虚拟主机目录,分别为 apache02apache03

1
mkdir -p /usr/local/tomcat/webapps/apache0{2,3}

2.分别在 2 个目录中创建 index.jsp 文件,内容都为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>当前访问域名和时间</title>
<script type="text/javascript">
function updateTime() {
var date = new Date();
var year = date.getFullYear();
var month = ('0' + (date.getMonth() + 1)).slice(-2);
var day = ('0' + date.getDate()).slice(-2);
var hours = ('0' + date.getHours()).slice(-2);
var minutes = ('0' + date.getMinutes()).slice(-2);
var seconds = ('0' + date.getSeconds()).slice(-2);

// 将时间部分格式化为 yyyy-MM-dd HH:mm:ss 的形式
var timeString = year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;

// 将时间部分的文本内容替换为带有颜色的文本
document.getElementById('time').innerHTML = '<span style="color: blue;">' + timeString + '</span>';
}
setInterval(updateTime, 1000); // 每秒更新一次时间
</script>
</head>
<body>
<h2>当前访问域名:<span style="color: red;"><%= request.getServerName() %></span></h2>
<h2>当前详细时间是:<span id="time"></span></h2>
</body>
</html>

Tomcat 主配置文件

单域名配置多个虚拟主机

1.编辑 Tomcat 主配置文件 /usr/local/tomcat/conf/server.xml ,在最后一个 </Host> 标签 和 </Engine>标签之间添加如下虚拟主机配置内容:

1
2
3
4
5
6
7
8
9
10
11
12
...
</Host> <!-- 虚拟主机 apache02.xxxxu.com 的配置-->
<Host name='apache02.xxxxu.com' appBase='webapps' unpackWARs='true' autoDeploy='true' xmlValidation='false' xmlNamespaceAware='fase'>
<Context docBase="/usr/local/tomcat/webapps/apache02" path="" reloadable="true" />
</Host>

<!-- 虚拟主机 apache03.xxxxu.com 的配置-->
<Host name='apache03.xxxxu.com' appBase='webapps' unpackWARs='true' autoDeploy='true' xmlValidation='false' xmlNamespaceAware='fase'>
<Context docBase="/usr/local/tomcat/webapps/apache03" path="" reloadable="true" />
</Host>
</Engine>
...

关于域名解析这里就不再复述了。如果还有不懂的,建议 bing.com 下

以下是 <Host> 元素配置项的解释:

name

  • 含义:虚拟主机的名称。
  • :apache03.xxxxu.com
  • 说明:该虚拟主机将响应来自 apache03.xxxxu.com 的请求。

appBase

  • 含义:Web应用程序的根目录。
  • :webapps
  • 说明:所有 Web 应用程序都将部署在 /usr/local/tomcat/webapps/webapps 目录下。

unpackWARs

  • 含义:是否自动解压 WAR 文件。
  • :true
  • 说明:Tomcat 将自动解压所有部署的 WAR 文件。

autoDeploy

  • 含义:是否自动部署 Web 应用程序。
  • :true
  • 说明:当 Tomcat 检测到 webapps 目录下有新 WAR 文件时,将自动部署它们。

xmlValidation

  • 含义:是否验证 XML 配置文件。
  • :false
  • 说明:Tomcat 将不验证 XML 配置文件的有效性。

xmlNamespaceAware

  • 含义:是否启用 XML 命名空间。
  • :false
  • 说明:Tomcat 将不启用 XML 命名空间。

Context

  • 含义:Web 应用程序的配置。
  • 属性
    • docBase:Web 应用程序的文档根目录。
    • path:Web 应用程序的上下文路径。
    • reloadable:是否允许重新加载 Web 应用程序。

示例

1
2
3
<Host name='apache03.xxxxu.com' appBase='webapps' unpackWARs='true' autoDeploy='true' xmlValidation='false' xmlNamespaceAware='fase'>
<Context docBase="/usr/local/tomcat/webapps/apache03" path="" reloadable="true" />
</Host>

解释

该配置定义了一个名为 apache03.xxxxu.com 的虚拟主机,该虚拟主机将响应来自 apache03.xxxxu.com 的请求。所有 Web 应用程序都将部署在 /usr/local/tomcat/webapps/webapps 目录下,Tomcat 将自动解压所有部署的 WAR 文件并自动部署它们。Tomcat 将不验证 XML 配置文件的有效性,也不启用 XML 命名空间。

该虚拟主机只有一个 Web 应用程序,其文档根目录为 /usr/local/tomcat/webapps/apache03,上下文路径为空,允许重新加载。

多域名配置单个虚拟主机

如果要将域名多个域名(比如: ‘apache02.xxxxu.com’ 和 ‘apache03.xxxxu.com’) 配置在同一个虚拟主机里面,则需要使用 <Alias> ... </Alias> 标签对引入,一行一个域名,如下:

1
2
3
4
5
6
7
8
9
...
</Host> <!-- 虚拟主机 apache02.xxxxu.com 的配置-->
<Host name='apache02.xxxxu.com' appBase='webapps' unpackWARs='true' autoDeploy='true' xmlValidation='false' xmlNamespaceAware='fase'>
<Alias>apache02.xxxxu.com</Alias>
<Alias>apache03.xxxxu.com</Alias>
<Context docBase="/usr/local/tomcat/webapps/apache02" path="" reloadable="true" />
</Host>
</Engine>
...

2.重启 tomcat 服务:

1
systemctl restart tomcat.service

访问测试

打开浏览器,分别输入 apache02.xxxxu.com:8080apache03.xxxxu.com:8080 访问如下:

访问 apache02.xxxxu.com:8080 如图:

访问 apache03.xxxxu.com:8080 如图: