Linux Tomcat 简单使用及 Nginx 反向代理
一、Tomcat 简介
Tomcat(全称为Apache Tomcat)是一个开源的、轻量级的应用服务器,由 Apache 软件基金会开发和维护,它实现了 Java Servlet、Java Server Pages(JSP)和 Java Expression Language(简称JEXL java表达式语言)等 Java EE 规范,并提供了一个运行这些 Web 应用程序的环境。在使用Tomcat 时,将 Java Web 应用程序(包括Servlet、JSP等文件)部署到 Tomcat 服务器中,然后通过 HTTP 协议访问这些应用程序,Tomcat提供了一个简单而强大的方式来托管和运行Java Web应用程序。
二、Tomcat 特点
Servlet容器:Tomcat是一个Servlet容器,负责处理和执行Java Servlet。Servlet是一种用Java编写的服务器端程序,用于处理Web请求和生成动态Web内容;
JSP支持:Tomcat还支持JavaServer Pages(JSP),一种将Java代码嵌入HTML中的技术,用于创建动态Web页面;
轻量级:Tomcat被设计为轻量级的应用服务器,易于安装和配置。它专注于提供基本的Servlet和JSP支持,而不像一些其他应用服务器那样包含大量的附加功能;
开源:Tomcat是开源软件,可以免费使用,并且其源代码是开 放的,允许用户根据需要进行修改和定制;
连接器支持:Tomcat支持多种连接器,可以与不同的Web服务器进行集成。最常见的是与Apache HTTP服务器一起使用的AJP(Apache JServ Protocol)连接器;
管理工具:Tomcat提供了Web-based管理工具,允许管理员轻松地配置和监控Tomcat服务器。这包括一个Web界面,可以用来管理Web应用程序、虚拟主机、连接器等;
安全性:Tomcat内置了一些安全特性,包括对SSL/TLS的支持,以及一些安全的配置选项,帮助保护Web应用程序免受攻击;
跨平台性:Tomcat是跨平台的,可以在不同的操作系统上运行,包括Windows、Linux、和macOS等
三、Java环境部署
1、Rocky部署java环境
准备java环境,Tomcat10移除了对Java 8的支持,要求使用Java 9及以上版本。
yum install java-11-openjdk -y
检查效果
java --version
定制java环境变量
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.25.0.9-7.el9.x86_64
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$JAVA_BIN:$PATH
加载环境变量
source /etc/profile.d/java.sh
2、Ubuntu部署java环境
准备java环境
apt install openjdk-17-jdk -y
检查效果
java --version
定制环境变量并加载
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$JAVA_BIN:$PATH
四、Tomcat 源码部署
1、Rocky部署Tomcat10
获取软件
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.47/bin/apache-tomcat-10.1.47.tar.gz
解压文件
tar -zxvf apache-tomcat-10.1.47.tar.gz -C /data/server/
定制软链接
查看目录结构
配置tomcat环境变量并加载
export CATALINA_BASE=/data/server/tomcat
export CATALINA_HOME=/data/server/tomcat
export CATALINA_TMPDIR=$CATALINA_HOME/temp
export CLASSPATH=$CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/tomcatjuli.jar
export PATH=$CATALINA_HOME/bin:$PATH
启动tomcat
查看端口
浏览器查看效果
2、Ubuntu部署Tomcat11
获取软件
wget https://dlcdn.apache.org/tomcat/tomcat-11/v11.0.4/bin/apache-tomcat-11.0.4.tar.gz
解压文件
tar -zxvf apache-tomcat-11.0.4.tar.gz -C /data/server/
配置软链接
ln -s /data/server/apache-tomcat-11.0.4 /data/server/tomcat
查看目录结构
定制环境变量
export CATALINA_BASE=/data/server/tomcat
export CATALINA_HOME=/data/server/tomcat
export CATALINA_TMPDIR=$CATALINA_HOME/temp
export CLASSPATH=$CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/tomcatjuli.jar
export PATH=$CATALINA_HOME/bin:$PATH
启动tomcat
查看端口
浏览器查看页面
五、定制 Tomcat 服务脚本
1、Rocky定制Tomcat服务脚本
停止tomcat服务
catalina.sh stop
定制专用服务用户
useradd -r -s /sbin/nologin tomcat
更改文件权限(因为是链接文件,所以,需要执行两条命令)
chown -R tomcat:tomcat /data/server/tomcat
chown -R tomcat:tomcat /data/server/tomcat/*
定制启动服务脚本
[Unit]
Description=Tomcat
After=syslog.target network.target[Service]
Type=forking
# Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.25.0.9-7.el9.x86_64
ExecStart=/data/server/tomcat/bin/startup.sh
ExecStop=/data/server/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
加载服务配置
systemctl daemon-reload
启动tomcat服务并查看状态
systemctl start tomcat
systemctl status tomcat
2、Ubuntu定制tomcat的服务脚本
停止tomcat服务
catalina.sh stop
定制专用服务用户
更改文件权限(因为是链接文件,所以,需要执行两条命令)
chown -R tomcat:tomcat /data/server/tomcat
chown -R tomcat:tomcat /data/server/tomcat/*
定制启动服务脚本
[Unit]
Description=Tomcat
After=syslog.target network.target[Service]
Type=forking
# Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
ExecStart=/data/server/tomcat/bin/startup.sh
ExecStop=/data/server/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat[Install]
WantedBy=multi-user.target
加载服务配置
systemctl daemon-reload
启动tomcat服务,查看状态
systemctl start tomcat
systemctl status tomcat
六、Tomcat 目录结构
查看tomcat的工作目录结构
功能解读
bin # 管理脚本文件目录
conf # 配置文件目录
lib # 库文件目录
logs # 日志目录
temp # 临时文件目录
webapps # 应用程序目录
work # jsp编译后的结果文件,建议提前预热访问,升级应用后,删除此目录数据才能更新
查看tomcat启动脚本
功能解读
/data/server/tomcat/bin/catalina.sh # 真实生效的管理脚本
/data/server/tomcat/bin/shutdown.sh # 停止tomcat服本
/data/server/tomcat/bin/startup.sh # 启动tomcat脚本
/data/server/tomcat/bin/version.sh # 输出版本信息
七、Tomcat 组件
Tomcat 作为 Java Web 容器,其核心功能依赖于一套层次化的组件体系,这些组件协同工作以接收、处理和响应客户端请求。核心组件包括 Connector(连接器)、Engine(引擎)、Host(主机)、Context(上下文),它们遵循 “层级包含” 关系:Server → Service → (Connector + Engine) → Host → Context,并通过 Service 组件与外部交互。
组件说明
组件 | 说明 |
---|---|
Server | 服务器,Tomcat 运行的进程实例,一个 Server 中可以有多个 service,但通常就一个 |
Service | 服务,用来组织 Engine 和 Connector 的对应关系,一个 service 中只有一个 Engine |
Connector | 连接器,负责客户端的 HTTP、HTTPS、AJP 等协议连接,与客户端直接通信,接收请求并转发给容器(Engine),同时将容器的响应返回给客户端。一个 Service 可以包含多个 Connector,所有 Connector 共享同一个 Engine |
Engine | 引擎,Tomcat 中最顶层的容器组件,负责管理多个 Host,用来响应并处理用户请求。一个 Engine 上可以绑定多个 Connector |
Host | 虚拟主机,通常关联一个或多个域名,负责管理该域名下的所有 Web 应用。可以实现多虚拟主机,例如使用不同的主机头区分 |
Context | 应用的上下文,对应一个具体的 Web 应用(如一个 WAR 包或一个解压后的 Web 目录),直接处理客户端请求。配置特定 url 路径映射和目录的映射关系:url => directory |
典型请求处理流程
客户端通过 HTTP 协议访问 http://www.example.com:8080/app1/login;
监听 8080 端口的 HTTP Connector 接收请求,解析出主机名 www.example.com 和路径 /app1;
Connector 将请求转发给 Engine;
Engine 根据主机名 www.example.com 找到对应的 Host;
Host 根据路径 /app1 找到对应的 Context;
Context 调用内部的 Servlet(如 LoginServlet)处理请求,生成响应;
响应按原路径返回给客户端。
八、Nginx 反向代理 Tomcat
1、核心原理
反向代理本质是 Nginx 作为 “中间层” 接收客户端请求,根据配置将请求转发给后端 Tomcat 处理,最终将 Tomcat 的响应返回给客户端。
架构流程
客户端 → Nginx(接收请求、静态资源处理)→ 转发动态请求到 Tomcat → Tomcat 处理动态业务(如 Servlet/JSP)→ Nginx → 客户端
2、优势
静态资源卸载:Nginx 处理静态资源(JS/CSS/ 图片)效率远高于 Tomcat,减少 Tomcat 非必要资源消耗;
负载均衡:多 Tomcat 集群场景下,Nginx 可均匀分配请求,避免单点过载;
端口统一:Nginx 监听 80/443 标准端口,Tomcat 隐藏在后端(如监听 8080),无需暴露非标准端口;
高可用:通过健康检查自动剔除故障 Tomcat,保证服务稳定性。
3、简单实践
在同一台服务器上部署 Nginx 和 Tomcat,Nginx 监听 80 端口,将请求转发至后端 Tomcat 的
8080 端口进行处理。
部署Tomcat并查看效果
定制nginx配置文件
server{listen 80;server_name rocky.test.com;location / {proxy_pass http://127.0.0.1:8080;proxy_set_header host $http_host;}# 将 .jsp 转发给 tomcatlocation ~* .jsp$ {proxy_pass http://127.0.0.1:8080;proxy_set_header host $http_host;}
}
检测nginx配置并重启服务
添加主机名解析
echo '10.0.0.15 rocky.test.com' >> /etc/hosts
访问测试