让一个 Tomcat 支持不同域名访问不同项目的配置方法
这里以部署两个项目 test1 和 test2 为例,部署到同一个 Tomcat 中,实现用两个域名 www.test1.com 和 www.test2.com 分别访问这两个项目。
方法很简单,只需修改 server.xml 文件即可,步骤如下。
1. 把 test1 项目的WAR包文件 test1.war 放到 Tomcat 的 webapps 目录下。
2. 在 Tomcat 目录下创建一个名为 “webapps2” 的目录(与 webapps 是同一级目录)。
譬如:
# pwd
/apache-tomcat-8.5.34
# ls
... webapps webapps2 ...
3. 把 test2 项目的WAR包文件 test2.war 放到 webapps2 目录下。
4. 编辑 server.xml 文件
先找到 <Host></Host> 标签:
...
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<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></Host>放在原<Host></Host>后面(为了简洁,可以把注释部分删掉):
...
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<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="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 "%r" %s %b" />
</Host>
...
用第1个 <Host></Host> 配置项目 test1 :
配置 “name” 属性为域名 “www.test1.com” ,还添加子标签<Context>并这样配置:<Context path="" docBase="../webapps/test1/"/> 。
<Host name="www.test1.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" docBase="../webapps/test1/"/>
</Host>
用第2个 <Host></Host> 配置项目 test2 :
配置 “name” 属性为域名 “www.test2.com” ,配置 “appBase” 属性为 "webapps2" ,并也要加子标签<Context>并配置:<Context path="" docBase="../webapps2/test2/"/> 。
<Host name="www.test2.com" appBase="webapps2" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" docBase="../webapps2/test2/"/>
</Host>
配置好后保存文件。
5. 重启 Tomcat 使配置生效
打开浏览器分别用不同域名访问项目,这样就实现了在一个 Tomcat 下用不同域名访问不同项目。如果要部署更多项目,操作同上,复制 <Host></Host> 标签,一个标签对应一个项目。