一、需求
- 需要在同一台服务器上,用 tomcat 部署两个应用系统,都是基于 java 编写的。
- 希望让用户使用不同的域名访问应用,且都用80端口,避免用户输入端口号。
- 环境: win2008 x64,tomcat8
二、可行做法
从互联网资料上,可以找到以下几种做法:
- 安装两个 tomcat ,分别设置不同启动端口,跑两个应用,然后用反向代理服务器(比如 nginx 或者 apache )实现不同域名解析到不同 tomcat 上;
- 在同一个 tomcat 下,修改 server.xml,设置两个 service 标签,用不同的监听端口区别开不同应用,然后在 host 内用不同域名与 appBase 区别开,然后用反向代理服务器实现80端口的复用;
- 在同一个 service 标签内,同一端口下,用多个 host 标签,同时实现多个虚拟主机。
三、实际操作
考虑到项目的访问量比较小,没必要用到反向代理,我们计划采用最为简单的设置模式(即前述方法3),共两步骤。
1. 建立合理目录结构
在 tomcat 的 webapps 目录下,建立如下目录结构:
webapps
├── app1
│ └──ROOT
│ ├──index.jsp
│ └──...
│── app2
│ └──ROOT
│ ├──index.jsp
│ └──...
...
应用程序的所有内容,都放在相应的 ROOT 目录底下。
2. 修改 server.xml
在 tomcat 的 server.xml 文件中,修改 host 标签,用 name 与 appBase 结合,实现“不同域名访问位于同一 tomcat 服务器下的不同应用”的需求,内容如下:
<Host name="app1.domain.com" appBase="webapps/app1" unpackWARs="true" autoDeploy="true">
...
</Host>
<Host name="app2.domain.com" appBase="webapps/app2" unpackWARs="true" autoDeploy="true">
...
</Host>
Host 标签中间,并不需要使用 context 标签,也不用设置 webBase 属性。
这样部署之后,整个服务器的文件放置规范,配置简单,需要新增应用的时候,也非常便捷。