本页内容
- 前置条件
- 安装 Java OpenJDK
- 下载 Apache Tomcat 10
- 将 Apache Tomcat 配置为系统服务
- 在 Apache Tomcat 10 中配置身份验证
- 将 Nginx 配置为反向代理
- 配置 Firewalld
- 结语
Apache Tomcat(简称“Tomcat”)是一个免费且开源的 Java Servlet 容器,用于运行 Java 代码和应用程序。它最初由 Sun Microsystem 创建,后来将代码库捐赠给 Apache 软件基金会,并依据 Apache License v2 许可证发布。Apache Tomcat 提供了一个“纯 Java”的 HTTP 服务器环境,Java 代码可在其中运行。同时,它也是 JavaServer Pages、Java 表达式语言以及 WebSocket 技术的实现。
Apache Tomcat 是最流行的 Java Servlet 实现之一。它支持 SSL 以保护身份验证等敏感数据。此外,它对服务器资源的占用较轻,且具备跨平台特性,可安装到类 Unix 操作系统、Windows 以及 macOS 上。
在下面的指南中,我们将演示如何在 AlmaLinux 9 服务器上安装 Apache Tomcat,并将其与 Nginx 反向代理配合使用。你将通过二进制包安装 Apache Tomcat,随后安装 Nginx 并为其配置用于反向代理的 server block。
前置条件
在开始之前,请确保你已具备以下条件:
- 一台 AlmaLinux 9 服务器。
- 一个具有管理员权限的非 root 用户。
安装 Java OpenJDK
在安装 Tomcat 之前,必须在你的 AlmaLinux 服务器上安装 Java JDK。对于 Apache Tomcat,你可以使用 Java JDK 11 或更高版本。在本示例中,我们将使用 Java OpenJDK 17,它默认包含在 AlmaLinux 9 的软件仓库中。
要安装 OpenJDK 17,请运行以下 dnf 命令。当提示确认时,输入 y 并按回车键。
sudo dnf install java-17-openjdk java-17-openjdk-devel

Java OpenJDK 安装完成后,运行以下 java 命令以验证你的 OpenJDK 版本。
java --version
你可以在下方看到已安装的 Java OpenJDK 17。

下载 Apache Tomcat 10
安装完 Java OpenJDK 后,你将通过二进制包手动下载并安装 Apache Tomcat。因此,在开始安装之前,请访问 Apache Tomcat 下载页面并获取下载链接。
首先,运行以下命令,创建一个名为 tomcat 的新系统用户,其默认主目录为 /opt/tomcat。
sudo groupadd tomcat
sudo adduser -r -s /usr/sbin/nologin -g tomcat -b /opt/tomcat tomcat
现在使用以下 wget 命令下载 Apache Tomcat 二进制包。在撰写本文时,最新的 Apache Tomcat 版本为 10.1.18。因此,请务必将 VERSION 变量替换为当前你所使用的 Tomcat 版本。
export VERSION=10.1.18
wget https://dlcdn.apache.org/tomcat/tomcat-10/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz
下载过程完成后,为 tomcat 用户创建新的主目录 /opt/tomcat,并将你的 Apache Tomcat 二进制包解压到该目录中。
mkdir -p /opt/tomcat
sudo tar -xf apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat
最后,运行以下命令,创建 Tomcat 目录到 /opt/tomcat/latest 的符号链接。然后,将 /opt/tomcat 目录的所有权更改为 tomcat 用户。
sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest
sudo chown -R tomcat:tomcat /opt/tomcat

将 Apache Tomcat 配置为系统服务
Apache Tomcat 安装完成后,下一步是为 Apache Tomcat 创建一个新的 systemd 服务。这样,你就可以通过 systemctl 工具轻松管理 Apache Tomcat,同时也能确保 Tomcat 的启动脚本集中在一个位置。
使用以下 nano 编辑器命令,创建新的 systemd 服务文件 /etc/systemd/system/tomcat10.service。
sudo nano /etc/systemd/system/tomcat10.service
将以下配置作为 Apache Tomcat 的 systemd 服务脚本插入。在 CATALINA_OPTS 参数中,请务必根据情况调整 Apache Tomcat 的最大堆内存。
[Unit] Description=Tomcat 10 servlet container After=network.target [Service] Type=forking User=tomcat Group=tomcat Environment="JAVA_HOME=/usr/lib/jvm/java" Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true" Environment="CATALINA_BASE=/opt/tomcat/latest" Environment="CATALINA_HOME=/opt/tomcat/latest" Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid" Environment="CATALINA_OPTS=-Xms512M -Xmx2048M -server -XX:+UseParallelGC" ExecStart=/opt/tomcat/latest/bin/startup.sh ExecStop=/opt/tomcat/latest/bin/shutdown.sh [Install] WantedBy=multi-user.target
完成后保存文件并退出编辑器。
现在运行以下命令以重新加载 systemd 管理器,并应用你新建的 tomcat10 服务。
sudo systemctl daemon-reload
现在你可以使用以下命令启动并设置 Apache Tomcat 服务 tomcat10 开机自启。
sudo systemctl enable tomcat10
sudo systemctl start tomcat10

启动后,运行以下命令验证 tomcat10 服务。如果一切正常,你应能看到 tomcat10 服务正在运行。
sudo systemctl status tomcat10

在 Apache Tomcat 运行后,执行以下 firewall-cmd 命令,开放 Apache Tomcat 所使用的 8080 端口。
sudo firewall-cmd --add-port=8080/tcp
最后,启动你的网页浏览器,并访问服务器 IP 地址加 8080 端口(http://192.168.5.50:8080)。如果你的 Apache Tomcat 安装成功,你应能看到如下所示的默认首页:

在 Apache Tomcat 10 中配置身份验证
至此,你已安装并运行了 Apache Tomcat。在本节中,你将了解如何在 Apache Tomcat 上设置并启用密码身份验证。
首先,运行以下 nano 编辑器命令,打开文件 /opt/tomcat/latest/conf/tomcat-users.xml。
sudo nano /opt/tomcat/latest/conf/tomcat-users.xml
将以下配置添加到 `
<tomcat-users> <!-- user: admin pass: tomcatadmin --> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <role rolename="admin-gui"/> <role rolename="admin-script"/> <user username="admin" password="tomcatadmin" roles="manager-gui, manager-script, manager-jmx, manager-status, admin-gui, admin-script"/> </tomcat-users>
完成后保存并退出文件。
现在使用以下 nano 编辑器命令,打开 Apache Tomcat Manager 和 Host Manager 的配置文件。
sudo nano /opt/tomcat/latest/webapps/host-manager/META-INF/context.xml
sudo nano /opt/tomcat/latest/webapps/manager/META-INF/context.xml
将 `className="org.apache.catalina.valves.RemoteAddrValve"` 添加注释 ``,以允许从任何位置访问 Apache Tomcat Manager 和 Host Manager。参见以下配置。
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
(可选)你也可以通过添加如下所示的 IP 地址,指定允许访问 Tomcat Manager 和 Host Manager 的 IP 地址:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|CLIENT-IP-ADDRESS" />
完成后保存文件并退出编辑器。
一切配置完成后,你现在可以使用以下命令重启 tomcat10 服务以使配置生效。执行后,你的 Apache Tomcat Manager 和 Host Manager 将在密码身份验证下运行。
sudo systemctl restart tomcat10
回到你的浏览器,访问 Apache Tomcat Manager 的 URL:http://192.168.5.50:8080/manager/。当提示输入密码进行基本身份验证时,输入你的 Apache Tomcat 管理员用户名和密码,然后点击“登录”。

如果你输入了正确的管理员用户名和密码,你应能看到如下的 Apache Tomcat Manager 仪表盘:

最后,通过 http://192.168.5.50:8080/host-manager/ 访问 Apache Tomcat Host Manager 的 URL,并在提示进行身份验证时使用 Tomcat 管理员用户名和密码登录。你将看到如下所示的 Host Manager 仪表盘:

将 Nginx 配置为反向代理
至此,你已完成 Apache Tomcat 的安装。接下来要做的,是安装并配置 Nginx,将其作为 Apache Tomcat 的反向代理。
要在你的 AlmaLinux 服务器上安装 Nginx,请运行以下 dnf 命令。输入 Y 确认并继续安装。
sudo dnf install nginx

Nginx 安装完成后,使用 nano 编辑器命令创建新的 server block 配置文件 /etc/nginx/conf.d/tomcat.conf。
sudo nano /etc/nginx/conf.d/tomcat.conf
添加以下 server block,将 Nginx 配置为运行在 8080 端口的 Apache Tomcat 的反向代理。
server {
listen 80;
server_name tomcat.howtoforge.local;
access_log /var/log/nginx/tomcat-access.log;
error_log /var/log/nginx/tomcat-error.log;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080/;
}
}
保存文件并退出编辑器。
现在运行以下命令,验证你的 Nginx 配置,确保语法正确。
sudo nginx -t

接下来,运行以下 systemctl 命令,启动并设置 Nginx Web 服务器开机自启。
sudo systemctl start nginx
sudo systemctl enable nginx
Nginx 启动后,运行以下命令验证 Nginx 服务。如果正在运行,你将看到 active (running) 的输出。
sudo systemctl status nginx
你可以在下方看到 Nginx 已在你的 AlmaLinux 服务器上启用并正在运行。

配置 Firewalld
由于 Apache Tomcat 运行在 Nginx 之后,你必须在 firewalld 配置中开放 HTTP 端口 0。
运行以下命令开放 HTTP 服务,并在你的 AlmaLinux 服务器中重新加载 firewalld。
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload
现在使用以下命令查看 firewalld 规则列表。
sudo firewall-cmd --list-all
请务必确保 Nginx Web 服务器的 HTTP 服务已启用。

现在回到你的网页浏览器,访问 Nginx server block 的本地域名,例如 http://tomcat.howtoforge.local/。如果你的 Nginx 反向代理配置成功,你将看到 Apache Tomcat 的默认首页。

现在通过 http://tomcat.howtoforge.local/manager 访问 Tomcat Manager 的 URL。当提示进行身份验证时,输入你的 Apache Tomcat 用户名和密码,然后点击“登录”。
如果你输入了正确的用户名和密码,你将看到如下的 Apache Tomcat Manager 仪表盘:

最后,通过 http://tomcat.howtoforge.local/host-manager/ 访问 Apache Tomcat Host Manager 的 URL,你将看到如下的 Apache Tomcat Host Manager 仪表盘:

结语
恭喜!你已成功在 AlmaLinux 9 服务器上安装了 Apache Tomcat。你通过二进制包在 AlmaLinux 服务器上手动安装了 Apache Tomcat 10。除此之外,你还将 Nginx 配置为 Apache Tomcat 安装的反向代理,并配置了 firewalld 以开放 HTTP 端口。