如何将Tomcat 9不同应用映射到不同域名根路径且隐藏应用名
Tomcat 9 多域名映射不同根应用配置方案
完全不需要额外部署反向代理服务器,仅修改Tomcat核心配置即可实现需求,具体步骤如下:
1. 核心配置逻辑说明
通过配置多台虚拟主机(<Host>节点),分别绑定不同域名,再将对应应用设置为该虚拟主机的根应用(上下文路径为空),即可隐藏URL中的应用名。
2. 具体配置步骤
2.1 编辑Tomcat配置文件
找到Tomcat安装目录下的conf/server.xml文件,定位到<Engine>节点,原有默认Host节点保留(用于支撑原来的my_xyz.com访问),新增两个虚拟主机配置,以下提供两种可选实现方案:
方案A:独立部署目录(更推荐,隔离性更强)
- 先创建两个独立的应用部署目录,比如
webapps_other和webapps_yet - 将App1的war包重命名为
ROOT.war放入webapps_other目录,App2的war包重命名为ROOT.war放入webapps_yet目录 - 在server.xml的
<Engine>节点内添加如下配置:
<!-- 对应other_xyz.com 映射App1 --> <Host name="other_xyz.com" appBase="webapps_other" unpackWARs="true" autoDeploy="true"> </Host> <!-- 对应yet_xyz.com 映射App2 --> <Host name="yet_xyz.com" appBase="webapps_yet" unpackWARs="true" autoDeploy="true"> </Host>
方案B:复用现有应用路径(无需移动原有应用文件)
如果不想改动原有App1、App2的部署位置(仍放在默认webapps/App1、webapps/App2目录下),可以直接在Host节点内配置<Context>指定根应用路径:
<!-- 对应other_xyz.com 映射App1 --> <Host name="other_xyz.com" appBase="webapps" unpackWARs="true" autoDeploy="false"> <Context path="" docBase="App1" reloadable="true"/> </Host> <!-- 对应yet_xyz.com 映射App2 --> <Host name="yet_xyz.com" appBase="webapps" unpackWARs="true" autoDeploy="false"> <Context path="" docBase="App2" reloadable="true"/> </Host>
注意:该方案需要将autoDeploy设为false,避免Tomcat自动识别App1/App2目录生成带应用名的上下文路径,导致重复部署。
2.2 重启Tomcat生效
配置修改完成后,执行Tomcat安装目录下的bin/shutdown.sh(Windows为bin/shutdown.bat)停止服务,再执行bin/startup.sh(Windows为bin/startup.bat)启动服务即可生效。
3. 注意事项
- 确保你的服务器DNS解析已经将
other_xyz.com、yet_xyz.com都指向当前Tomcat服务器的公网IP - 应用内部不要硬编码带有
/App1、/App2前缀的资源路径,建议使用相对路径或动态获取上下文路径的接口生成路径,避免资源加载失败
内容的提问来源于stack exchange,提问作者AhmadWabbi
相关产品推荐
相关产品推荐

