CentOS 与 Tomcat 的协同工作
在 CentOS 上,Tomcat 通常作为运行 Java Web(Servlet/JSP) 的应用服务器,由系统提供运行环境、网络与进程管理能力。常见做法是让 Tomcat 监听本机端口(如 8080),再通过 Nginx/Apache HTTPD 做反向代理或负载均衡,统一对外提供 80/443 访问;在安全与隔离上,使用最小权限运行、系统服务管理、以及防火墙策略配合,实现稳定、可维护的生产协同。
部署与运行 Tomcat
- 安装 JDK(以 OpenJDK 8 为例):sudo yum install -y java-1.8.0-openjdk-devel
- 下载并解压 Tomcat(示例到 /opt):
- wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.56/bin/apache-tomcat-9.0.56.tar.gz
- sudo tar xvf apache-tomcat-9.0.56.tar.gz -C /opt
- 创建专用用户并授权:
- sudo groupadd tomcat
- sudo useradd -s /bin/false -g tomcat -d /opt/apache-tomcat-9.0.56 tomcat
- sudo chown -R tomcat:tomcat /opt/apache-tomcat-9.0.56
- 配置环境变量(/etc/profile.d/tomcat.sh):
- export CATALINA_HOME=/opt/apache-tomcat-9.0.56
- export PATH=$PATH:$CATALINA_HOME/bin
- source /etc/profile.d/tomcat.sh
- 启动与验证:/opt/apache-tomcat-9.0.56/bin/startup.sh,访问 http://服务器IP:8080
- 防火墙放行:sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent && sudo firewall-cmd --reload
- 部署应用:将 WAR 放入 webapps,或配置 Context 指向外部目录。
进程管理与自启动
- 推荐以 systemd 托管 Tomcat(/etc/systemd/system/tomcat.service):
- [Unit] Description=Apache Tomcat Web Application Container;After=network.target
- [Service] Type=forking;User=tomcat;Group=tomcat
- Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
- Environment=CATALINA_HOME=/opt/apache-tomcat-9.0.56
- Environment=CATALINA_BASE=/opt/apache-tomcat-9.0.56
- Environment=‘CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC’
- Environment=‘JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom’
- ExecStart=/opt/apache-tomcat-9.0.56/bin/startup.sh
- ExecStop=/opt/apache-tomcat-9.0.56/bin/shutdown.sh
- Restart=always;RestartSec=10
- [Install] WantedBy=multi-user.target
- 常用命令:sudo systemctl daemon-reload;sudo systemctl start|enable|status tomcat。
反向代理与负载均衡
- Nginx 作为反向代理与负载均衡(/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/tomcat.conf):
- http { upstream backend { server 10.0.0.11:8080; server 10.0.0.12:8080; } server { listen 80; server_name yourdomain.com; location / { proxy_pass http://backend; 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; } } }
- 校验并重载:sudo nginx -t && sudo systemctl reload nginx
- Apache HTTPD 与 Tomcat 集成(两种主流方式):
- mod_proxy:使用 HTTP 反向代理,配置简单、通用;在 httpd.conf 中启用模块并配置 ProxyPass/ProxyPassReverse。
- mod_jk:通过 AJP 协议 与 Tomcat 的 8009 端口通信,适合与 Apache 深度整合;需配置 workers.properties、uriworkermap.properties,并可启用 jkstatus 做状态与切换管理。
高可用与会话保持
- 多实例 + 负载均衡:在 Nginx 的 upstream 中列出多个 Tomcat 实例,实现流量分发与故障转移;可结合健康检查参数(如 max_fails、fail_timeout)提升稳定性。
- Tomcat 内置集群与会话复制:在 server.xml 的 Engine 上配置 jvmRoute,在 conf/context.xml 启用 ,并使用 DeltaManager 或 BackupManager 进行会话复制,实现无感故障切换与横向扩展。