Tomcat 搭建基于域名的虚拟主机详解
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
美国云虚拟主机 助力出海企业低成本上云 WAF网站防火墙 为您的业务网站保驾护航
虚拟主机是一种在单一物理服务器上模拟多个独立服务器的技术,通过虚拟主机,可以为不同的域名提供各自独立的网站内容,在 Tomcat 中,虚拟主机功能允许根据 HTTP 请求头中的 Host
字段来决定将请求路由到哪个 Web 应用。
虚拟主机主要分为两种类型:
- 基于IP的虚拟主机:每个虚拟主机绑定一个独立的 IP 地址。
- 基于域名的虚拟主机:多个虚拟主机共享一个 IP 地址,通过请求中的
Host
头字段来区分目标站点。
本文将重点介绍第二种方式——基于域名的虚拟主机配置方法,帮助你实现在同一台服务器上托管多个网站。
环境准备
在开始配置之前,请确保你已准备好以下基础环境:
- 已安装 Java 环境(建议使用 JDK 1.8 或更高版本)
- 已下载并安装 Apache Tomcat(推荐使用 Tomcat 9 或更高版本)
- 熟悉 Linux 或 Windows 系统的基本操作
- 若需从外网访问,确保域名已解析到服务器的公网 IP 地址
配置步骤详解
修改 server.xml
文件
Tomcat 的核心配置文件为 $CATALINA_HOME/conf/server.xml
,通过在该文件中添加多个 <Host>
元素,可以实现基于域名的虚拟主机配置。
打开 server.xml
,你会看到默认的 Host 配置如下:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> </Host>
我们可以在该 Host 配置下方添加多个新的 <Host>
元素,每个对应一个域名。
示例配置
<Host name="www.example1.com" appBase="/data/webapps1" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="/data/webapps1/myapp1" reloadable="true"/> </Host><Host name="www.example2.com" appBase="/data/webapps2" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="/data/webapps2/myapp2" reloadable="true"/> </Host>
配置说明
name
:虚拟主机的域名,用于匹配 HTTP 请求中的Host
头。appBase
:Web 应用程序的存放目录,可以是绝对路径,也可以是相对于 Tomcat 安装目录的相对路径。<Context>
:定义 Web 应用的上下文路径和物理路径。docBase
:指定 Web 应用的根目录,可以是解压后的文件夹,也可以是 WAR 包。path=""
:表示该应用为该虚拟主机的默认应用,访问域名时将直接加载。
注意:
appBase
指向的是 Tomcat 默认的webapps
目录,则该 Host 会自动部署该目录下的所有应用,否则,需要手动配置<Context>
配置 DNS 或本地 Hosts 进行测试
为了测试基于域名的虚拟主机功能,你需要确保域名能够正确解析到 Tomcat 服务器的 IP 地址。
配置 DNS
在域名管理平台中,将你的域名解析到服务器的公网 IP,
www.example1.com
→168.1.100
www.example2.com
→168.1.100
本地 Hosts 文件测试
在开发或测试阶段,可以修改本地 Hosts 文件来模拟域名解析,无需配置 DNS。
- Windows 系统:
C:\Windows\System32\drivers\etc\hosts
- Linux / macOS 系统:
/etc/hosts
127.0.0.1 www.example1.com
127.0.0.1 www.example2.com
配置完成后,访问 www.example1.com
和 www.example2.com
时,系统会将其解析到本地,从而验证虚拟主机是否正常工作。
部署 Web 应用
根据你在 <Host>
中配置的 appBase
和 docBase
路径,将相应的 Web 应用程序(如 WAR 包或解压后的文件夹)部署到对应的目录下:
/data/webapps1/myapp1
→ 对应www.example1.com
/data/webapps2/myapp2
→ 对应www.example2.com
Tomcat 启动时会自动部署这些应用,你也可以通过 Tomcat 管理界面或热部署方式进行手动部署。
验证配置是否成功
启动 Tomcat:
$CATALINA_HOME/bin/startup.sh
在浏览器中分别访问以下地址:
http://www.example1.com:8080
http://www.example2.com:8080
如果能分别看到不同网站的内容,则说明虚拟主机配置成功。
常见问题与解决方法
问题1:访问域名时返回默认 Host 的内容
原因:HTTP 请求中的 Host
头未匹配到任何配置的 <Host>
,Tomcat 会使用默认的 Host(通常是第一个 Host)。
解决方法:
- 确认域名是否正确解析。
- 检查浏览器访问的域名是否与
server.xml
中配置的name
完全一致。 - 在默认 Host 中配置一个错误页面,防止显示其他站点内容。
<Host name="localhost" appBase="webapps" ...> <Context path="" docBase="/data/webapps/default" /> </Host>
问题2:Context 配置未生效
原因:Context 配置有误,或者路径不存在或权限不足。
解决方法:
- 确认
docBase
路径存在,并具有读取权限。 - 尽量使用绝对路径,避免相对路径导致混淆。
- 可以将 Context 配置写入
$CATALINA_HOME/conf/[enginename]/[hostname]/contextname.xml
文件中,实现更灵活的管理。
问题3:无法访问 Web 应用资源
原因:文件