核心概念
在开始之前,我们需要明确几个角色:

- JDK (Java Development Kit): Tomcat 是一个用 Java 编写的应用,所以它必须依赖 Java 运行环境,你需要安装 JDK。
- Tomcat: 本身是一个 Web 容器,它负责运行你的 Java Web 应用(.war 文件)。
- Web Server (如 Nginx/Apache): 这是一个可选但强烈推荐的角色,Tomcat 自带的 HTTP 连接器性能有限,且功能不如专业的 Web 服务器强大,我们会用 Nginx 或 Apache 作为前端,接收所有用户请求,然后将动态请求(如
.jsp,.do)转发给 Tomcat,而直接处理静态资源(如css,js,images),这种架构称为 反向代理。
第一步:安装环境
安装 JDK
Tomcat 8/9/10 需要 JDK 8 或更高版本,我们推荐使用 OpenJDK。
对于 CentOS / RHEL / Fedora:
# 安装 OpenJDK 11 (这是一个稳定且广泛使用的版本) sudo yum install java-11-openjdk-devel -y # 验证安装 java -version javac -version
对于 Ubuntu / Debian:
# 更新包列表 sudo apt update # 安装 OpenJDK 11 sudo apt install openjdk-11-jdk -y # 验证安装 java -version javac -version
创建 Tomcat 专用用户
出于安全考虑,永远不要使用 root 用户来运行 Tomcat,我们创建一个专门的、没有登录权限的用户。

# 创建一个名为 'tomcat' 的用户和组 sudo groupadd tomcat sudo useradd -s /bin/false -g tomcat tomcat
第二步:下载并安装 Tomcat
我们使用官方二进制包,这是最简单的方式。
-
下载 Tomcat 访问 Tomcat 官方下载页面,选择 "Core" 下的 "tar.gz" 链接,这里以 Tomcat 9 为例。
# 进入临时目录 cd /tmp # 下载 Tomcat 9 (请替换为最新版本号) wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz # 解压 tar -xzf apache-tomcat-9.0.85.tar.gz
-
移动并设置权限 将 Tomcat 安装到一个合适的目录,
/opt。# 创建 Tomcat 安装目录 sudo mkdir -p /opt/tomcat # 移动解压后的目录到 /opt/tomcat sudo mv apache-tomcat-9.0.85 /opt/tomcat/ # 将 tomcat 用户设置为目录的所有者 sudo chown -R tomcat:tomcat /opt/tomcat/apache-tomcat-9.0.85 # 给脚本文件添加执行权限 sudo sh -c 'chmod +x /opt/tomcat/apache-tomcat-9.0.85/bin/*.sh'
第三步:配置 Tomcat
配置环境变量 (可选但推荐)
为了让系统在任何地方都能找到 Tomcat 的命令,可以配置 CATALINA_HOME。

# 编辑 profile 文件 sudo vi /etc/profile.d/tomcat.sh # 添加以下内容 export CATALINA_HOME=/opt/tomcat/apache-tomcat-9.0.85 export PATH=$PATH:$CATALINA_HOME/bin # 保存后,让配置生效 source /etc/profile.d/tomcat.sh
修改 server.xml (核心配置文件)
server.xml 位于 $CATALINA_HOME/conf/ 目录下,是 Tomcat 最核心的配置文件。
sudo vi $CATALINA_HOME/conf/server.xml
主要关注以下几个部分:
-
端口配置
<Connector port="8080" ... />: 这是 Tomcat 默认的监听端口,用于接收 HTTP 请求,你可以修改它,比如改为8081,以避免与其他服务冲突。<Connector port="8443" ... />: 这是 HTTPS 连接器,默认是关闭的(SSLEnabled="false"),如果你需要直接提供 HTTPS 服务,需要配置 SSL 证书并启用它。<Server port="8005" ... />: 这是 Tomcat 的关闭端口,通过执行./shutdown.sh,实际上是向这个端口发送一个停止命令,确保这个端口不被防火墙拦截。
-
部署你的应用 你可以将你的
.war文件直接放到$CATALINA_HOME/webapps/目录下,Tomcat 会自动部署它,或者,你可以在server.xml的<Host>标签内手动配置一个虚拟主机。<!-- 在 <Host name="localhost" ...> 标签内添加 --> <Context docBase="/path/to/your/webapp" path="/myapp" reloadable="true" />
docBase: 你的应用 WAR 文件解压后的根目录,或者 WAR 文件本身路径。path: 访问这个应用的 URL 路径,http://yourdomain.com:8080/myapp。reloadable="true: 开启热部署,开发时方便,但生产环境建议设为false以提升性能。
第四步:配置 Systemd 服务 (推荐)
为了方便地启动、停止、重启 Tomcat,并让它开机自启,我们将其配置为 Systemd 服务。
-
创建服务文件
sudo vi /etc/systemd/system/tomcat.service
-
粘贴以下内容
[Unit] Description=Apache Tomcat Web Application Container After=network.target [Service] Type=forking # 环境变量 Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" # 你的 JDK 路径,用 `which java` 查看 Environment="CATALINA_PID=/opt/tomcat/apache-tomcat-9.0.85/temp/tomcat.pid" Environment="CATALINA_HOME=/opt/tomcat/apache-tomcat-9.0.85" Environment="CATALINA_BASE=/opt/tomcat/apache-tomcat-9.0.85" Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -XX:MaxMetaspaceSize=256M" # JVM 内存设置 # 运行用户和执行命令 User=tomcat Group=tomcat ExecStart=/opt/tomcat/apache-tomcat-9.0.85/bin/startup.sh ExecStop=/opt/tomcat/apache-tomcat-9.0.85/bin/shutdown.sh # 重启策略 RestartSec=10 Restart=on-failure [Install] WantedBy=multi-user.target
-
启动并启用服务
# 重新加载 systemd 配置 sudo systemctl daemon-reload # 启动 Tomcat sudo systemctl start tomcat # 检查状态 sudo systemctl status tomcat # 设置开机自启 sudo systemctl enable tomcat
你可以通过 http://<你的服务器IP>:8080 来访问 Tomcat 的默认页面了。
第五步:配置防火墙
确保防火墙允许 Tomcat 的端口(如 8080)被访问。
对于 CentOS / RHEL / Fedora (使用 firewalld):
# 添加永久规则,允许 8080 端口 sudo firewall-cmd --permanent --add-port=8080/tcp # 重新加载防火墙 sudo firewall-cmd --reload
对于 Ubuntu / Debian (使用 ufw):
# 允许 8080 端口 sudo ufw allow 8080/tcp
第六步:配置 Nginx 反向代理 (强烈推荐)
这一步将让你的 Tomcat 更安全、更高效。
-
安装 Nginx
# CentOS sudo yum install nginx -y # Ubuntu sudo apt install nginx -y
-
创建 Nginx 配置文件
sudo vi /etc/nginx/conf.d/tomcat.conf
-
server { listen 80; server_name your_domain.com; # 替换成你的域名或 IP location / { # 将所有请求转发给 Tomcat proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 可选:静态资源由 Nginx 直接处理,提高速度 # location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ { # root /path/to/your/webapp/static; # 你的静态资源路径 # expires 30d; # } } -
测试并重启 Nginx
# 测试 Nginx 配置文件语法 sudo nginx -t # 如果测试通过,重启 Nginx sudo systemctl restart nginx sudo systemctl enable nginx
用户访问 http://your_domain.com 时,实际上是 Nginx 在背后为他们服务,并将请求转发到本地的 Tomcat (8080端口),你的 Tomcat 端口不再直接暴露在公网上,安全性大大提高。
第七步:安全优化
-
修改默认管理端口 (8005) 编辑
$CATALINA_HOME/conf/server.xml,修改Server标签的port属性为一个不常用的端口,并确保防火墙规则也相应更新。 -
删除默认应用和示例 为了减少攻击面,删除或重命名
$CATALINA_HOME/webapps/目录下的docs,examples,host-manager,manager等目录。 -
配置管理员账户 编辑
$CATALINA_HOME/conf/tomcat-users.xml,删除默认的注释用户,并为你自己创建一个具有manager-gui,admin-gui角色的管理员账户。<tomcat-users xmlns="http://tomcat.apache.org/xml.tomcat-users-config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tomcat.apache.org/xml.tomcat-users-config http://tomcat.apache.org/xml.tomcat-users-config.xsd"> <role rolename="manager-gui"/> <role rolename="admin-gui"/> <user username="your_admin_user" password="your_strong_password" roles="manager-gui,admin-gui"/> </tomcat-users>注意: 如果使用了 Nginx 反向代理,你可能需要修改
$CATALINA_HOME/webapps/manager/META-INF/context.xml,允许来自 Nginx 代理 IP 的访问。 -
设置 JVM 内存 在
tomcat.service文件中,我们已经通过CATALINA_OPTS设置了 JVM 的初始和最大堆内存 (-Xms,-Xmx),你需要根据服务器的实际内存来调整这些值,一个常见的经验法则是,将最大堆内存设置为服务器物理内存的 50%-75%。
总结与检查清单
- [ ] 安装 JDK 并验证
java -version。 - [ ] 创建
tomcat用户。 - [ ] 下载并解压 Tomcat 到
/opt目录。 - [ ] 设置目录权限,所有者为
tomcat用户。 - [ ] 配置
server.xml,修改端口(可选)和部署应用。 - [ ] 创建
tomcat.serviceSystemd 服务,并设置为开机自启。 - [ ] 启动 Tomcat,并检查状态
systemctl status tomcat。 - [ ] 配置防火墙,允许 Tomcat 端口(如 8080)。
- [ ] 访问
http://IP:8080,确认 Tomcat 默认页面可以打开。 - [ ] (推荐) 安装并配置 Nginx 作为反向代理。
- [ ] (推荐) 进行安全优化:修改管理端口、删除默认应用、设置强密码、调整 JVM 内存。
至此,你的 Tomcat 服务器已经配置完成,并且具备了生产环境所需的基本安全性和性能。
