当前位置:首页 > 虚拟主机 > 正文

tomcat虚拟主机域名绑定域名解析

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 &quot;%r&quot; %s %b" />
</Host>

参数说明
| 属性 | 作用 | 备注 |
|————–|—————————————-|——————————|
| name | 绑定的完整域名 | 支持通配符.domain.com |
| appBase | 该虚拟主机对应的Web应用存放路径 | 默认相对于webapps目录 |
| unpackWARs | 是否自动解压WAR包 | true=自动解压,false=保留原包 |
| autoDeploy | 是否自动部署新放入的Web应用 | true=自动部署,false=手动触发 |

创建对应目录结构

执行以下命令生成应用目录:

tomcat虚拟主机域名绑定域名解析  第1张

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

验证访问

  1. 启动Tomcat:<TOMCAT_HOME>/bin/startup.sh(Linux)或startup.bat(Windows)
  2. 浏览器访问:http://www.example.com
  3. 预期结果:显示部署在ROOT目录下的网页内容。

进阶配置(可选)

HTTPS支持(SSL证书)

  1. 获取证书文件(.keystore格式)
  2. 修改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"/>
  3. 重启Tomcat使配置生效。

多站点共存方案

场景 解决方案
同IP不同端口 修改<Connector port="8080">并调整<Host>name属性
同端口不同域名 确保所有域名均正确解析到同一IP,依赖ServerNameIndication协议
混合模式 同时存在根域名和其他子域名时,优先按<Host>顺序匹配

常见问题与解答

Q1: 为什么修改了配置后无法通过域名访问?

A: 可能原因及排查步骤:

  1. DNS未生效:使用dig www.example.com +short检查解析结果是否为服务器IP。
  2. 防火墙拦截:确认80/443端口已在云服务器安全组或本地防火墙放行。
  3. 应用未部署:检查appBase路径下是否存在有效的ROOT目录及索引文件(如index.html)。
  4. 日志排查:查看<TOMCAT_HOME>/logs/catalina.out是否有错误堆栈。

Q2: 如何在一个Tomcat实例中同时支持多个相似域名?

A: 两种典型方案:

  1. 通配符域名:将<Host name=".example.com">,此时所有.example.com的请求都会路由到同一应用。
  2. 精确匹配优先:按顺序定义多个<Host>,例如先定义api.example.com再定义blog.example.com,Tomcat会按顺序尝试匹配。

注意:使用通配符时,应用内部需通过request.getServerName()区分

0