本页内容

  • 前置条件
  • 安装 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

在 AlmaLinux 9 上使用 Nginx 反向代理安装 Apache Tomcat

Java OpenJDK 安装完成后,运行以下 java 命令以验证你的 OpenJDK 版本。

java --version

你可以在下方看到已安装的 Java OpenJDK 17。

在 AlmaLinux 9 上使用 Nginx 反向代理安装 Apache Tomcat

下载 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

在 AlmaLinux 9 上使用 Nginx 反向代理安装 Apache 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

在 AlmaLinux 9 上使用 Nginx 反向代理安装 Apache Tomcat

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

sudo systemctl status tomcat10

在 AlmaLinux 9 上使用 Nginx 反向代理安装 Apache Tomcat

在 Apache Tomcat 运行后,执行以下 firewall-cmd 命令,开放 Apache Tomcat 所使用的 8080 端口。

sudo firewall-cmd --add-port=8080/tcp

最后,启动你的网页浏览器,并访问服务器 IP 地址加 8080 端口(http://192.168.5.50:8080)。如果你的 Apache Tomcat 安装成功,你应能看到如下所示的默认首页:

在 AlmaLinux 9 上使用 Nginx 反向代理安装 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

将以下配置添加到 ` ... ` 部分中。请务必将默认用户名 admin 和密码 tomcatadmin 替换为你自己的凭据。

<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 管理员用户名和密码,然后点击“登录”。

在 AlmaLinux 9 上使用 Nginx 反向代理安装 Apache Tomcat

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

在 AlmaLinux 9 上使用 Nginx 反向代理安装 Apache Tomcat

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

在 AlmaLinux 9 上使用 Nginx 反向代理安装 Apache Tomcat

将 Nginx 配置为反向代理

至此,你已完成 Apache Tomcat 的安装。接下来要做的,是安装并配置 Nginx,将其作为 Apache Tomcat 的反向代理。

要在你的 AlmaLinux 服务器上安装 Nginx,请运行以下 dnf 命令。输入 Y 确认并继续安装。

sudo dnf install nginx

在 AlmaLinux 9 上使用 Nginx 反向代理安装 Apache Tomcat

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

在 AlmaLinux 9 上使用 Nginx 反向代理安装 Apache Tomcat

接下来,运行以下 systemctl 命令,启动并设置 Nginx Web 服务器开机自启。

sudo systemctl start nginx
sudo systemctl enable nginx

Nginx 启动后,运行以下命令验证 Nginx 服务。如果正在运行,你将看到 active (running) 的输出。

sudo systemctl status nginx

你可以在下方看到 Nginx 已在你的 AlmaLinux 服务器上启用并正在运行。

在 AlmaLinux 9 上使用 Nginx 反向代理安装 Apache Tomcat

配置 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 服务已启用。

在 AlmaLinux 9 上使用 Nginx 反向代理安装 Apache Tomcat

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

在 AlmaLinux 9 上使用 Nginx 反向代理安装 Apache Tomcat

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

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

在 AlmaLinux 9 上使用 Nginx 反向代理安装 Apache Tomcat

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

在 AlmaLinux 9 上使用 Nginx 反向代理安装 Apache Tomcat

结语

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