Tomcat 配置二级域名映射

我们知道 nginx 是可以根据二级域名配置路由的,其实 Tomcat 也具有类似的功能。

比如有这样一个场景:

Tomcat 下有两个项目:blog、shop,部署在服务器上映射的一级域名为:zhangzw.com。

期望效果:

访问:http://blog.zhangzw.com,到达的是 blog 项目,访问:http://shop.zhangzw.com,到达的是 shop 项目。

配置方法

找到 conf/server.xml 文件,在 Engine 标签下添加两个 Host 配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<Engine name="Catalina" defaultHost="localhost">

<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b"
/>
</Host>

<Host name="blog.zhangzw.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="blog_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b"
/>
<Context path="" docBase="blog" reloadable="true"/>
</Host>

<Host name="shop.zhangzw.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="shop_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b"
/>
<Context path="" docBase="shop" reloadable="true"/>
</Host>
</Engine>

说明:

  • Host name

    需要与二级域名配置一样。

  • prefix

    access log 每个 Host 配置不一样,这样利于区分。

  • Context docBase

    可以是相对路径,如上所述配置,表示 conf/webapps/blogconf/webapps/shop 目录;

    也可以是绝对路径:如:/usr/local/blog