需求是这样的,有一个tomcat,是80端口,现在我要通过这个tomcat转发到服务器其他tomcat,其他tomcat的端口不是80.这样做就可以避免这样www.baidu.com:8081的情况。
比如我现在的域名是www.baidu.com. 我映射好域名和ip,建好了对应的子域名one.baidu.com two.baidu.com
我现在有三个tomcat启动这,端口分别是:80 81 82
因为默认端口是80所以我可以直接www.baidu.com 访问到我的80tomcat的项目。但是我想one.baidu.com 访问到81的tomcat, two.baidu.com 访问到82的tomcat。
首先要配80 的域名映射。
在80的tomcat的server.xml 的 Engine节点下配置
1
2
3
4
5
6
7
8
9
10
|
< Host name = "www.baidu.com" appBase = "webapps"
unpackWARs = "true" autoDeploy = "true" >
< Context path = "" docBase = "baidu" reloadable = "true" />
< Valve className = "org.apache.catalina.valves.AccessLogValve" directory = "logs"
prefix = "localhost_access_log" suffix = ".txt"
pattern = "%h %l %u %t "%r" %s %b" />
</ Host >
|
这样我输入www.baidu.com就可以访问到80tomcat下的baidu的项目了。
下面的配置可以让我直接输入one.baidu.com two.baidu.com 直接访问到对应端口下的项目
1
2
3
4
5
6
7
8
9
10
|
< Host name = "one.baidu.com" appBase = "webapps"
unpackWARs = "true" autoDeploy = "true" >
< Context path = "/" docBase = "/test/one/apache-tomcat-8.0.14/webapps/oneBaidu" reloadable = "true" />
< Valve className = "org.apache.catalina.valves.AccessLogValve" directory = "logs"
prefix = "localhost_access_log" suffix = ".txt"
pattern = "%h %l %u %t "%r" %s %b" />
</ Host >
< Host name = "two.baidu.com" appBase = "webapps"
unpackWARs = "true" autoDeploy = "true" >
< Context path = "/" docBase = "/test/two/apache-tomcat-8.0.14/webapps/twoBaidu" reloadable = "true" />
< Valve className = "org.apache.catalina.valves.AccessLogValve" directory = "logs"
prefix = "localhost_access_log" suffix = ".txt"
pattern = "%h %l %u %t "%r" %s %b" />
</ Host >
|
这样就达到了需求了。
contex指上下文,实际上就是一个web项目;
path是虚拟目录,访问的时候用127.0.0.1:8080/welcom/*.jsp访问网页,welcome前面要加/;
docBase是网页实际存放位置的根目录,映射为path虚拟目录;
reloadable="true"表示你修改了jsp文件后不需要重启就可以实现显示的同步。
这个方式的话,当启动第一个80端口的tomcat的时候,其他项目会全部启动。分别启动其他端口的tomcat也没影响,只是会更新项目而已。
这样做的好处就是,如果某个项目修改了要上传了,启动下对应端口下的tomcat,在关闭,那么就更新了,不用像以前那样启动一个tomcat有很多项目要重启。
但是我觉得实际中,应该不这样应用~