虚拟主机(Host) 就是让一台 Tomcat 服务器跑多个网站 / 多个域名,比如:
它们共用一个 Tomcat,但项目、目录、域名完全隔离。
配置文件:
conf/server.xml一、先看懂默认虚拟主机(localhost)
打开
server.xml,你会看到默认的 Host 配置:xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
</Host>
name:域名(localhost = 本机)appBase:项目存放目录(默认 webapps)autoDeploy:自动部署
二、配置一个新虚拟主机(完整示例)
我们新增一个 www.test.com 站点:
1. 在 server.xml 里添加新 <Host>
直接复制这段,放在默认 Host 下面:
xml
<!-- 新增虚拟主机:www.test.com -->
<Host name="www.test.com"
appBase="D:/tomcat/testweb" <!-- 项目存放目录(自己建) -->
unpackWARs="true"
autoDeploy="true">
<!-- 访问日志(可选,建议加上) -->
<Valve
className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="test_access_log"
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
2. 创建项目目录
新建文件夹:
plaintext
D:/tomcat/testweb/
把你的 WAR 包 / 项目放进去,和默认
webapps 用法一样。三、配置本地域名映射(测试必做)
因为我们是本地测试,需要修改 hosts 文件:
Windows
plaintext
C:\Windows\System32\drivers\etc\hosts
添加一行:
plaintext
127.0.0.1 www.test.com
Linux/Mac
plaintext
/etc/hosts
添加同上。
四、重启 Tomcat 完成!
现在访问:
plaintext
http://www.test.com:8080
就能访问到 testweb 目录下的项目,和默认网站完全隔离。
五、多域名同时运行(最终效果)
一台 Tomcat,同时跑 3 个网站:
xml
<!-- 默认主机 -->
<Host name="localhost" appBase="webapps" ...></Host>
<!-- 网站1 -->
<Host name="www.site1.com" appBase="D:/site1" ...></Host>
<!-- 网站2 -->
<Host name="www.site2.com" appBase="D:/site2" ...></Host>
六、最常用高级配置
1. 设置默认首页(ROOT 项目)
在 Host 里添加:
xml
<Context path="" docBase="ROOT" reloadable="true" />
把项目放到
appBase/ROOT 目录,直接访问域名即可。2. 配置默认虚拟主机
修改最顶部的
<Engine>:xml
<Engine name="Catalina" defaultHost="www.test.com">
没有匹配的域名时,默认访问这个主机。
七、完整配置模板(直接复制)
xml
<Engine name="Catalina" defaultHost="localhost">
<!-- 默认主机 -->
<Host name="localhost" appBase="webapps" autoDeploy="true"></Host>
<!-- 你的虚拟主机 -->
<Host name="www.mydomain.com" appBase="D:/myweb" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="mydomain_log" suffix=".txt" />
</Host>
</Engine>
总结
- 虚拟主机作用:一台 Tomcat 跑多个域名 / 网站
- 配置位置:server.xml → <Host> 标签
- 关键参数:
name(域名)、appBase(项目目录) - 测试必须改:hosts 文件