Tomcat配置多个Service,多个同名的应用运行在一个tomcat下

http://www.ff-bb.cn/logs/109466274.html

Tomcat配置多个Service,多个同名的应用运行在一个tomcat下

网站项目中有时候会碰到,每个网站一个网站后台程序,偏偏因为某种原因,这后台程序的名称还是一样的,比如都叫 app.war,这样如果有2个或以上网站需要用各自的app.war,那么就需要安装多个tomcat,资源浪费比较大。也不好管理。有没有一种可能,将这几个app.war放到一个tomcat下运行呢? 答案是可以的。

修改%TOMCAT_HOME%/conf/server.xml
将Service元素复制一份,直接粘贴到原来那个Service元素之后,即 .....这一部分复制下来,放到第一个 之后,然后再继续修改刚刚添加的部分配置信息:

按照下列步骤修改第二个Service元素:

将Service元素的name属性改为Catalina2
将第一个Connector元素的port属性由8080改为其他未使用的端口,如8081
将第二个Connector元素的port属性由8009改为其他未使用的端口,如8010
将Engine元素的name属性由Catalina改为Catalina2,与Service的name属性保持一致
将Host元素的appBase属性由webapps改为webapps2
创建目录
%TOMCAT_HOME%/conf/Catalina2/localhost
%TOMCAT_HOME%/webapps2
将%TOMCAT_HOME%/webapps/ROOT复制到%TOMCAT_HOME%/webapps2

这样就有两个工程放置的目录,一个是webapp 一个是webapp2,这里面都可以放你的war工程,而且如果工程名字相同都没有问题。它们之间是没有干扰的。

启动Tomcat
访问tomcat主页 可以
http://localhost:8080/app
http://localhost:8081/app

当然你可以配置了多个 Service 元素。就需要修改Tomcat的内存参数,防止内存溢出。如果你是linux系统,修改 %TOMCAT_HOME%/bin/catalina.bat
-Xms //初始堆大小
-Xmx //最大堆大小
-XX:PermSize //初始永久区大小
-XX:MaxPermSize //最大永久区大小
放到有效配置的第一行

set JAVA_OPTS=-server -Xincgc -Xms1024m -Xmx1024m -XX:MaxPermSize=256m

如果你是windows系统,去修改注册表吧,
HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\tomcat6.0\Parameters\Java
右边的 Options 里面一条配置占一行 前后不能有空格。
然后重启。
<think>好的,用户之前已经询问过关于Tomcat启动但项目未解压的问题,现在用户再次提问,说WAR文件权限正常,server.xml配置也正常,但Tomcat启动时还是未解压该文件。我需要仔细分析可能的原因,并给出解决方案。 首先,用户确认了权限和配置没有问题,那可能的问题可能出在其他地方。比如,Tomcat的自动解压机制是否被触发?可能用户将WAR文件放在了错误的位置,或者文件名有特殊字符,比如包含版本号或时间戳,导致Tomcat无法正确识别。比如,如果文件名中有空格或其他特殊符号,Tomcat可能不会自动解压。 另外,用户可能没有注意到Tomcat的解压行为是否被其他配置覆盖。比如,context.xml文件中是否有设置阻止解压?或者是否在conf/Catalina/localhost目录下有相关的XML文件,指定了不同的解压路径或行为? 还有可能是磁盘空间不足,或者inode用尽,导致解压失败。虽然用户之前可能检查过,但需要再次确认。此外,如果webapps目录下已经存在同名的目录,Tomcat可能不会覆盖,而是直接使用现有目录,如果该目录是空的或损坏的,可能导致应用无法访问。 另外,WAR文件本身可能有问题,比如结构不正确,虽然用户可能做过测试,但可能需要更详细的检查,比如检查META-INF或WEB-INF目录是否存在,或者web.xml是否有错误。 还有可能的是,Tomcat的版本问题,或者JVM的配置问题,比如内存不足导致解压过程中断,但日志中可能没有明显错误。需要查看日志是否有内存溢出的情况。 此外,SELinux或AppArmor的安全策略可能阻止了Tomcat进程写入webapps目录,即权限正确,但安全上下文不正确,导致访问被拒绝。用户可能需要检查这些安全模块的状态,并调整策略或目录标签。 用户可能没有注意到Tomcat的工作目录是否被清理,比如work和temp目录中的残留文件可能导致问题,需要清理后再重启。 最后,可能需要手动触发解压,比如将WAR文件重命名为ROOT.war,或者通过管理界面部署,或者检查是否启用了并行部署功能,导致解压延迟。 总结下来,需要从文件名、目录结构、安全策略、磁盘空间、日志细节、手动解压测试等多个方面进行排查,确保每一步都检查到位,帮助用户找到根本原因。</think>当遇到 **WAR文件权限正常**、**server.xml配置正确**,但Tomcat仍不解压WAR文件时,可按以下深度排查流程解决: --- ### **一、文件名与路径验证** 1. **文件名格式冲突** - **现象**:文件名包含特殊字符(如`#`、空格)或版本号(如`app_v1.2.3.war`)可能导致Tomcat忽略解压。 - **验证**: ```bash ls -l $CATALINA_HOME/webapps/ | grep ".war" ``` - **解决**:重命名为简单名称(如`app.war`)。 2. **部署路径错误** - **检查点**:确认WAR文件未错误放置到`webapps/ROOT/`或子目录中,应直接放在`webapps/`顶层。 --- ### **二、上下文配置覆盖** 1. **检查`context.xml`配置** - 若存在`META-INF/context.xml`或`conf/Catalina/localhost/app.xml`,可能覆盖全局配置。 - **关键参数**: ```xml <Context docBase="app.war" unpackWAR="true" /> ``` 确保未显式设置`unpackWAR="false"`。 2. **删除残留配置** ```bash rm -f $CATALINA_HOME/conf/Catalina/localhost/app.xml # 删除可能冲突的独立上下文配置 ``` --- ### **三、Tomcat解压机制验证** 1. **手动触发解压测试** ```bash cd $CATALINA_HOME/webapps/ mkdir app_temp && unzip -q app.war -d app_temp # 手动解压测试 ``` - **成功**:说明WAR文件正常,Tomcat自身机制未触发。 - **失败**:WAR文件损坏(需重建)。 2. **检查WAR文件结构** ```bash jar tf app.war | grep WEB-INF/web.xml # 验证WEB-INF/web.xml存在性 ``` - **缺失**:项目未正确打包(如使用非标准构建工具)。 --- ### **四、Tomcat内部机制排查** 1. **自动解压触发条件** - Tomcat仅在以下情况解压WAR文件: - WAR文件首次放入`webapps`目录 - WAR文件修改时间戳更新(需`autoDeploy="true"`) - **强制触发**: ```bash touch app.war # 更新文件时间戳 ``` 2. **清理Tomcat缓存** ```bash rm -rf $CATALINA_HOME/work/Catalina/localhost/ # 删除已缓存的部署记录 rm -rf $CATALINA_HOME/temp/* # 清理临时文件 ``` --- ### **五、安全策略与系统限制** 1. **SELinux上下文修复** ```bash ls -Z $CATALINA_HOME/webapps/app.war # 检查安全上下文 chcon -R -t tomcat_exec_t $CATALINA_HOME/webapps/app.war # 修正上下文(仅限SELinux系统) ``` 2. **文件系统挂载属性** - 若`webapps`目录挂载为`noexec`或`nodev`: ```bash mount | grep $CATALINA_HOME/webapps # 检查挂载参数 ``` - **解决**:重新挂载或更换本地目录。 --- ### **六、日志深度分析** 1. **启用DEBUG日志** 修改`conf/logging.properties`,增加以下配置: ```properties org.apache.catalina.startup.HostConfig.level = FINE ``` 重启Tomcat后观察日志: ```bash grep "HostConfig" $CATALINA_HOME/logs/catalina.out ``` - **期望输出**: ``` Deploying web application archive [/opt/tomcat/webapps/app.war] ``` 2. **检查静默异常** ```bash grep -i "exception" $CATALINA_HOME/logs/catalina.out # 搜索未打印到前台的异常 ``` --- ### **七、替代解决方案** 1. **强制解压部署** - 手动解压并重命名为目标目录: ```bash unzip app.war -d $CATALINA_HOME/webapps/app/ chown -R tomcat:tomcat $CATALINA_HOME/webapps/app/ ``` - 重启Tomcat后,检查是否识别为已解压项目。 2. **使用Tomcat Manager** 通过Web管理界面(`http://server:port/manager/html`)手动上传并部署WAR文件,观察操作反馈。 --- ### **总结流程图** ```mermaid graph TD A[现象: WAR未解压] --> B{文件名/路径正确?} B -->|否| C[修正文件名/路径] B -->|是| D{手动解压成功?} D -->|否| E[修复WAR文件] D -->|是| F{检查context覆盖配置} F -->|存在冲突| G[删除独立上下文配置] F -->|正常| H{检查SELinux/挂载属性} H -->|异常| I[调整安全策略] H -->|正常| J{检查Tomcat日志} J -->|发现异常| K[根据日志修复] J -->|无异常| L[清理缓存+强制时间戳更新] ``` 通过以上步骤,可覆盖绝大多数因“静默配置”或“隐式限制”导致的问题。若仍无法解决,建议在Tomcat启动时添加`-Djava.security.debug=all`参数,检查JVM安全策略拦截情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值