如何在 Rocky Linux 8 上安装 Apache Tomcat 10 和 Nginx
在此页
- 先决条件
- 第 1 步 - 安装 Java
- 第 2 步 - 创建系统用户
- 第 3 步 - 下载 Tomcat
- 第 4 步 - 创建 Systemd 单元文件
- 第 5 步 - 启动并启用 Tomcat 服务
- 第 6 步 - 配置防火墙
- 第 7 步 - 配置 Tomcat Web 管理界面
- 第 8 步 - 安装 SSL
- 第 9 步 - 安装 Nginx
- 第 10 步 - 运行 TomCat
- 结论
Tomcat 是用于基于 Java 的应用程序的开源 Web 服务器。它用于部署 Java Servlet 和 JSP 应用程序。 Java servlet 是定义服务器如何处理请求和响应的小程序。 Tomcat 充当 Java Servlet、JavaServer Pages、Java 表达式语言和 Java WebSocket 技术的开源实现。
有多个版本的 Tomcat 可用。我们将在教程中讨论 Tomcat 10 的安装。如果要安装 Tomcat 9,说明将相同。如果有任何变化,它们将在教程中指定。
在我们的教程中,我们将安装 Tomcat 10 和 Nginx 服务器作为反向代理并使用 SSL 保护它。有一个 Tomcat 10.1.x 版本,它是 Tomcat 的最新 alpha 版本,但我们不会安装它。
先决条件
-
A server running Rocky Linux 8.5
-
A non-sudo user with superuser privileges.
-
Make sure everything is updated.
$ sudo dnf update
-
Packages required for the installation.
$ sudo dnf install wget tar
第 1 步 - 安装 Java
Tomcat 9 和 10 需要 Java 8 及更高版本。我们将安装 OpenJDK 11,这是 Java 平台的开源实现。
运行以下命令来安装 OpenJDK。
$ sudo dnf install java-11-openjdk-devel
验证安装。
$ java -version
openjdk version "11.0.13" 2021-10-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.13+8-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8-LTS, mixed mode, sharing)
第 2 步 - 创建系统用户
我们将创建一个新的系统用户,以通过以根用户身份运行 Tomcat 来最大限度地降低任何安全风险。对于新用户,我们将设置 /opt/tomcat
作为主目录。
运行以下命令为 Tomcat 创建一个新的系统用户。
$ sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat
第 3 步 - 下载 Tomcat
可以从其下载页面下载最新版本的 Tomcat v10。在编写本教程时,v10.0.14 是最新的可用版本。在下载 Tomcat 之前检查最新版本。
使用wget
下载Tomcat。
$ VERSION=10.0.14
$ wget https://dlcdn.apache.org/tomcat/tomcat-10/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz
将文件解压到 /opt/tomcat
目录。
$ sudo tar -xf apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat/
创建指向 Tomcat 安装目录的最新版本 Tomcat 的符号链接。
$ sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest
将目录的所有权更改为之前创建的用户。
$ sudo chown -R tomcat:tomcat /opt/tomcat
第 4 步 - 创建系统单元文件
下一步是为 Tomcat 服务器创建一个服务文件,以便它可以自动启动。
创建并打开文件 /etc/systemd/system/tomcat.service
进行编辑。
$ sudo nano /etc/systemd/system/tomcat.service
粘贴以下代码。
[Unit]
Description=Apache Tomcat 10 Servlet container
Wants=network.target
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
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 -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh
Restart=always
[Install]
WantedBy=multi-user.target
通过按 Ctrl + X 并在提示保存时输入 Y 来保存文件。
第 5 步 - 启动并启用 Tomcat 服务
重新加载服务守护进程以启用 Tomcat 服务。
$ sudo systemctl daemon-reload
启用并启动 Tomcat 服务。
$ sudo systemctl enable tomcat --now
检查服务状态。
$ sudo systemctl status tomcat
? tomcat.service - Apache Tomcat 10 Servlet container
Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2021-12-17 15:54:28 UTC; 24s ago
Process: 86219 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 86226 (java)
Tasks: 19 (limit: 11411)
Memory: 132.7M
CGroup: /system.slice/tomcat.service
??86226 /usr/lib/jvm/jre/bin/java -Djava.util.logging.config.file=/opt/tomcat/latest/conf/logging.properties>
Dec 17 15:54:27 howtoforge systemd[1]: Starting Apache Tomcat 10 Servlet container...
Dec 17 15:54:28 howtoforge systemd[1]: Started Apache Tomcat 10 Servlet container.
第 6 步 - 配置防火墙
Rocky Linux 使用 Firewalld 防火墙。检查防火墙状态。
$ sudo firewall-cmd --state
running
允许 HTTP 和 HTTPS 端口。
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
重新加载防火墙以启用更改。
$ sudo firewall-cmd --reload
第 7 步 - 配置 Tomcat Web 管理界面
网络管理界面只有在我们为其创建用户凭据后才能访问。
Tomcat 用户和角色在 /opt/tomcat/latest/conf/tomcat-users.xml
文件中定义。打开文件进行编辑。
$ sudo nano /opt/tomcat/latest/conf/tomcat-users.xml
在 行之前添加以下行。用您的凭据替换用户名和密码。
为经理和管理员 Tomcat 门户选择不同的凭据。
<tomcat-users>
<!--
Comments
-->
<role rolename="manager-gui"/>
<user username="manager" password="managerpassword" roles="manager-gui" />
<role rolename="admin-gui"/>
<user username="admin" password="adminpassword" roles="admin-gui"/>
</tomcat-users>
通过按 Ctrl + X 并在提示保存时输入 Y 来保存文件。
默认情况下,Tomcat 界面只能从本地主机访问。如果您需要从任何地方访问它,则需要对其进行配置。
打开 /opt/tomcat/latest/webapps/manager/META-INF/context.xml
进行编辑。
$ sudo nano /opt/tomcat/latest/webapps/manager/META-INF/context.xml
删除以下行或按照以下指定将其注释掉,方法是将其括在 中。
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
允许从任何 IP 地址访问都存在安全风险。您可以通过仅允许从您的公共 IP 地址访问来限制它。如果您的公共 IP 地址是 22.22.22.22,则按如下方式更改该行。
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|22.22.22.22" />
允许的 IP 地址列表由竖线 (|) 分隔。您可以添加单个 IP 地址或使用正则表达式。
通过按 Ctrl + X 并在提示保存时输入 Y 来保存文件。
对文件 /opt/tomcat/latest/webapps/host-manager/META-INF/context.xml
也执行相同的更改。
完成后,重新启动 Tomcat 服务器。
$ sudo systemctl restart tomcat
第 8 步 - 安装 SSL
要使用 Lets Encrypt 安装 SSL 证书,我们需要安装 Certbot 工具。
首先,您需要下载并安装 EPEL 存储库。
$ sudo dnf install epel-release
运行以下命令来安装 Certbot。
$ sudo dnf install certbot
生成 SSL 证书。
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m -d tomcat.example.com
上面的命令会将证书下载到服务器上的 /etc/letsencrypt/live/tomcat.example.com
目录。
生成 Diffie-Hellman 组证书。
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
为 Lets Encrypt 自动更新创建一个挑战 webroot 目录。
$ sudo mkdir -p /var/lib/letsencrypt
创建 Cron 作业以更新 SSL。它将每天运行以检查证书并在需要时更新。为此,首先,创建文件 /etc/cron.daily/certbot-renew
并打开它进行编辑。
$ sudo nano /etc/cron.daily/certbot-renew
粘贴以下代码。
#!/bin/sh
certbot renew --cert-name tomcat.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
更改任务文件的权限以使其可执行。
$ sudo chmod +x /etc/cron.daily/certbot-renew
第 9 步 - 安装 Nginx
Rocky Linux 8.5 附带了最新的稳定版 Nginx。使用以下命令安装它。
$ sudo dnf module install nginx:1.20
验证安装。
$ nginx -v
nginx version: nginx/1.20.1
启用并启动 Nginx 服务。
$ sudo systemctl enable nginx --now
创建并打开文件 /etc/nginx/conf.d/tomcat.conf
进行编辑。
$ sudo nano /etc/nginx/conf.d/tomcat.conf
将以下代码粘贴到其中。
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name tomcat.example.com;
access_log /var/log/nginx/tomcat.access.log;
error_log /var/log/nginx/tomcat.error.log;
# SSL
ssl_certificate /etc/letsencrypt/live/tomcat.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tomcat.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/tomcat.example.com/chain.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
resolver 8.8.8.8;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# enforce HTTPS
server {
listen 80;
listen [::]:80;
server_name tomcat.example.com;
return 301 https://$host$request_uri;
}
完成后按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
打开文件 /etc/nginx/nginx.conf
进行编辑。
$ sudo nano /etc/nginx/nginx.conf
在行 include /etc/nginx/conf.d/*.conf;
之前添加以下行。
server_names_hash_bucket_size 64;
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
验证 Nginx 配置文件语法。
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重新启动 Nginx 服务以启用新配置。
$ sudo systemctl restart nginx
第 10 步 - 运行 TomCat
在浏览器中启动 https://tomcat.example.com
,它将打开以下屏幕。

您现在可以使用我们在第 7 步中配置的登录凭据访问服务器状态、管理器应用程序和主机管理器页面。
结论
我们关于在基于 Rocky Linux 8.5 的服务器上安装和配置 Tomcat 服务器并通过 Nginx 反向代理服务并使用 SSL 保护它的教程到此结束。如果您有任何问题,请在下面的评论中发表。