如何在 Ubuntu 22.04 上使用 Nginx 反向代理安装 Apache Tomcat
Apache Tomcat 是一个开源 Java Web 服务器和 Servlet 容器,用于托管用 Java 编写的 Web 应用程序。它是Web开发人员基于Java软件平台构建和维护动态网站和应用程序的首选。它是由 Apache 软件基金会开发的开源项目。 Tomcat 使 Web 服务器能够处理基于 Java 的动态 Web 内容。
本教程将向您展示如何在 Ubuntu 22.04 上安装 Apache Tomcat。
先决条件
- 运行 Ubuntu 22.04 的服务器。
- 与您的服务器 IP 指向的有效域名。
- 服务器上配置了 root 密码。
安装Java JDK
Apache Tomcat 是一个基于 Java 的应用程序,因此您的服务器上必须安装 Java。如果未安装 Java,您可以使用以下命令安装它:
apt install default-jdk -y
安装 Java 后,您可以使用以下命令验证 Java 版本:
java -version
您将得到以下输出:
openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+10-Ubuntu-0ubuntu0.22.04.1)
OpenJDK 64-Bit Server VM (build 11.0.15+10-Ubuntu-0ubuntu0.22.04.1, mixed mode, sharing)
在 Ubuntu 22.04 上安装 Apache Tomcat
首先,最好以单独的用户身份运行 Tomcat。您可以使用以下命令创建 Tomcat 用户:
useradd -m -d /opt/tomcat -U -s /bin/false tomcat
接下来,使用以下命令下载最新版本的 Apache Tomcat:
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.20/bin/apache-tomcat-10.0.20.tar.gz
下载 Apache Tomcat 后,将下载的文件解压到 /opt 目录中:
tar xzvf apache-tomcat-10*tar.gz -C /opt/tomcat --strip-components=1
接下来,为 Tomcat 目录设置适当的所有权和权限:
chown -R tomcat:tomcat /opt/tomcat/
chmod -R u+x /opt/tomcat/bin
完成后,您可以继续下一步。
创建 Tomcat 管理用户
默认情况下,无需任何身份验证即可访问Tomcat。因此建议启用身份验证并为 Tomcat 创建管理用户。您可以通过编辑 Tomcat 用户配置文件来添加它:
nano /opt/tomcat/conf/tomcat-users.xml
在 行上方添加以下行:
<role rolename="admin-gui" />
<user username="admin" password="yourpassword" roles="manager-gui,admin-gui" />
完成后保存并关闭文件。
启用 Tomcat 远程访问
默认情况下,Tomcat 配置为仅从本地主机访问。因此建议启用Tomcat远程访问以从远程主机管理Tomcat。
要从远程主机启用管理器应用程序,请编辑以下文件:
nano /opt/tomcat/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" />
要从远程主机启用主机管理器应用程序,请编辑以下文件:
nano /opt/tomcat/webapps/host-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" />
完成后保存并关闭文件。
为 Apache Tomcat 创建服务文件
接下来,您需要创建一个服务文件来通过 systemd 管理 Tomcat 服务。您可以使用以下命令创建它:
nano /etc/systemd/system/tomcat.service
添加以下行:
[Unit]
Description=Tomcat
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
保存并关闭文件,然后重新加载 systemd 守护进程以应用更改:
systemctl daemon-reload
接下来,使用以下命令启动 Tomcat 服务并使其在系统重新引导时启动:
systemctl start tomcat
systemctl enable tomcat
您可以使用以下命令检查 Apache Tomcat 的状态:
systemctl status tomcat
您将得到以下输出:
? tomcat.service - Tomcat
Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-29 08:11:54 UTC; 6s ago
Process: 18959 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 18966 (java)
Tasks: 29 (limit: 4630)
Memory: 116.4M
CPU: 5.312s
CGroup: /system.slice/tomcat.service
??18966 /usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Dja>
Apr 29 08:11:54 ubuntu systemd[1]: Starting Tomcat...
Apr 29 08:11:54 ubuntu startup.sh[18959]: Tomcat started.
Apr 29 08:11:54 ubuntu systemd[1]: Started Tomcat.
此时Tomcat已启动并监听8080端口,可以通过以下命令查看:
ss -antpl | grep java
您将得到以下输出:
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:* users:(("java",pid=18966,fd=53))
LISTEN 0 100 *:8080 *:* users:(("java",pid=18966,fd=43))
完成后,您可以继续下一步。
将 Nginx 配置为 Tomcat 的反向代理
接下来,您需要创建一个 Nginx 作为 Apache Tomcat 的反向代理。首先,使用以下命令安装 Nginx Web 服务器:
apt-get install nginx -y
安装 Nginx Web 服务器后,使用以下命令创建 Nginx 虚拟主机配置文件:
nano /etc/nginx/conf.d/tomcat.conf
添加以下行:
server {
listen 80;
server_name tomcat.example.com;
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 是否存在语法错误:
nginx -t
您将得到以下输出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
接下来,重新启动 Nginx 服务以应用更改:
systemctl restart nginx
您还可以使用以下命令检查 Nginx 状态:
systemctl status nginx
您应该看到以下输出:
? nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-29 08:15:28 UTC; 8s ago
Docs: man:nginx(8)
Process: 19070 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 19071 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 19072 (nginx)
Tasks: 3 (limit: 4630)
Memory: 3.3M
CPU: 63ms
CGroup: /system.slice/nginx.service
??19072 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
??19073 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
??19074 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
Apr 29 08:15:28 ubuntu systemd[1]: Starting A high performance web server and a reverse proxy server...
Apr 29 08:15:28 ubuntu systemd[1]: Started A high performance web server and a reverse proxy server.
访问 Apache Tomcat
现在,打开 Web 浏览器并使用 URL http://tomcat.example.com 访问 Apache Tomcat Web 界面。您应该在以下屏幕上看到 Tomcat 仪表板:
单击经理应用程序。系统将要求您进行身份验证,如下所示:
提供您的管理员用户名和密码,然后单击登录按钮。您应该在以下屏幕上看到 Manager App 仪表板:
要访问主机管理器应用程序,请单击主机管理器。您应该看到以下屏幕:
点击服务器状态。您应该在以下屏幕上看到 Apache Tomcat 状态:
结论
恭喜!您已在 Ubuntu 22.04 上成功安装了 Apache Tomcat,并使用 Nginx 作为反向代理。您现在可以使用 Apache Tomcat 创建并托管您的第一个 Java 应用程序。如果您有任何疑问,请随时问我。