tomcat虚拟主机域名绑定域名解析
- 虚拟主机
- 2025-08-10
- 4
Tomcat配置虚拟主机需在server.xml中新增元素,设置域名及应用路径;域名解析则通过DNS将域名指向服务器
前置条件
项目 | 要求 |
---|---|
Java环境 | 已安装JDK且配置环境变量 |
Tomcat版本 | 建议使用最新稳定版(如Apache Tomcat 10.x) |
操作系统 | Linux/Windows均可,需具备文件读写权限 |
域名所有权 | 已完成域名注册并可管理DNS记录 |
核心配置步骤
修改server.xml
文件
路径:<TOMCAT_HOME>/conf/server.xml
关键操作:在<Engine>
标签内新增<Host>
节点
示例配置:
<Host name="www.example.com" appBase="webapps/example" unpackWARs="true" autoDeploy="true"> <!-可选:单独定义访问日志路径 --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="example_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
参数说明:
| 属性 | 作用 | 备注 |
|————–|—————————————-|——————————|
| name | 绑定的完整域名 | 支持通配符.domain.com
|
| appBase | 该虚拟主机对应的Web应用存放路径 | 默认相对于webapps
目录 |
| unpackWARs | 是否自动解压WAR包 | true=自动解压,false=保留原包 |
| autoDeploy | 是否自动部署新放入的Web应用 | true=自动部署,false=手动触发 |
创建对应目录结构
执行以下命令生成应用目录:
mkdir -p <TOMCAT_HOME>/webapps/example/ROOT
将你的Web项目(如.war
包或解压后的文件夹)放入ROOT
目录。
DNS解析配置
登录域名控制面板,添加以下类型记录:
| 记录类型 | 主机记录 | 值 | TTL | 作用 |
|———-|—————-|——————|——|————————–|
| A记录 | www.example.com | 服务器公网IP | 3600 | 将域名指向服务器IP |
| AAAA记录 | www.example.com | 服务器IPv6地址 | 3600 | IPv6支持(可选) |
️ 注意:DNS生效时间通常为10分钟~48小时,可通过nslookup www.example.com
验证。
本地测试(可选)
若暂未完成DNS解析,可在客户端修改hosts
文件快速测试:
- Windows:
C:WindowsSystem32driversetchosts
- Linux/Mac:
/etc/hosts
添加一行:<服务器IP> www.example.com
验证访问
- 启动Tomcat:
<TOMCAT_HOME>/bin/startup.sh
(Linux)或startup.bat
(Windows) - 浏览器访问:
http://www.example.com
- 预期结果:显示部署在
ROOT
目录下的网页内容。
进阶配置(可选)
HTTPS支持(SSL证书)
- 获取证书文件(
.keystore
格式) - 修改
server.xml
中的<Connector>
:<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" keystoreFile="conf/keystore.jks" keystorePass="your_password"/>
- 重启Tomcat使配置生效。
多站点共存方案
场景 | 解决方案 |
---|---|
同IP不同端口 | 修改<Connector port="8080"> 并调整<Host> 的name 属性 |
同端口不同域名 | 确保所有域名均正确解析到同一IP,依赖ServerNameIndication 协议 |
混合模式 | 同时存在根域名和其他子域名时,优先按<Host> 顺序匹配 |
常见问题与解答
Q1: 为什么修改了配置后无法通过域名访问?
A: 可能原因及排查步骤:
- DNS未生效:使用
dig www.example.com +short
检查解析结果是否为服务器IP。 - 防火墙拦截:确认80/443端口已在云服务器安全组或本地防火墙放行。
- 应用未部署:检查
appBase
路径下是否存在有效的ROOT
目录及索引文件(如index.html
)。 - 日志排查:查看
<TOMCAT_HOME>/logs/catalina.out
是否有错误堆栈。
Q2: 如何在一个Tomcat实例中同时支持多个相似域名?
A: 两种典型方案:
- 通配符域名:将
<Host name=".example.com">
,此时所有.example.com
的请求都会路由到同一应用。 - 精确匹配优先:按顺序定义多个
<Host>
,例如先定义api.example.com
再定义blog.example.com
,Tomcat会按顺序尝试匹配。
️ 注意:使用通配符时,应用内部需通过request.getServerName()
区分