温馨提示×

Debian Tomcat怎样配虚拟主机

小樊
41
2026-10-03 12:32:48
栏目: 云计算

在 Debian 上通过 Tomcat 配置虚拟主机(Virtual Host),本质是在 server.xml 中配置 <Host>,并配合目录结构和(可选)Apache/Nginx 做反向代理。下面按最常见、最稳妥的方式说明。


一、前提环境

假设:

  • Debian 11/12
  • Tomcat 9/10(通过 apt 或官方 tar.gz 安装)
  • 两个域名:
    • www.a.com
    • www.b.com

二、Tomcat 原生虚拟主机配置(推荐先学会这个)

1️⃣ 修改 server.xml

路径一般是:

/etc/tomcat9/server.xml

或

/opt/tomcat/conf/server.xml

在 <Engine> 标签内添加多个 <Host>:

<Engine name="Catalina" defaultHost="www.a.com">

  <Host name="www.a.com" appBase="webapps/a"
        unpackWARs="true" autoDeploy="true">
    <Valve className="org.apache.catalina.valves.AccessLogValve"
           directory="logs"
           prefix="a_access_log"
           suffix=".txt"
           pattern="%h %l %u %t "%r" %s %b"/>
  </Host>

  <Host name="www.b.com" appBase="webapps/b"
        unpackWARs="true" autoDeploy="true">
    <Valve className="org.apache.catalina.valves.AccessLogValve"
           directory="logs"
           prefix="b_access_log"
           suffix=".txt"
           pattern="%h %l %u %t "%r" %s %b"/>
  </Host>

</Engine>

2️⃣ 创建目录结构

mkdir -p /var/lib/tomcat9/webapps/a
mkdir -p /var/lib/tomcat9/webapps/b

放入应用:

webapps/a/ROOT.war
webapps/b/ROOT.war

或直接放静态内容:

webapps/a/ROOT/index.html

3️⃣ 改 Hosts(测试用)

vim /etc/hosts
127.0.0.1 www.a.com
127.0.0.1 www.b.com

4️⃣ 重启 Tomcat

systemctl restart tomcat9

访问:

http://www.a.com:8080
http://www.b.com:8080

✅ 虚拟主机已生效


三、用 80 端口(生产环境)

方案一:Nginx 反向代理(推荐)

Nginx 配置示例

server {
    server_name www.a.com;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
    }
}

server {
    server_name www.b.com;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
    }
}
nginx -t
systemctl reload nginx

✅ 域名直接访问,无需端口


方案二:Tomcat 直接监听 80(不推荐)

<Connector port="80" protocol="HTTP/1.1"
           connectionTimeout="20000" />

⚠️ 需要 root 权限,安全性差


四、默认虚拟主机

<Host name="localhost" appBase="webapps"
      unpackWARs="true" autoDeploy="true"/>

defaultHost 指向它即可。


五、常见坑

❌ 域名没解析到服务器
❌ Host name 和 proxy_set_header Host 不一致
❌ WAR 没放 ROOT.war
❌ Tomcat 没重启


六、总结

✅ 最简方案

  • Tomcat <Host> 配虚拟主机
  • Nginx 反代 80 → 8080

如果你愿意,我可以:

  • 给你 完整 server.xml 示例
  • 教你 Tomcat + Let’s Encrypt HTTPS
  • 或 一个 Tomcat 跑多个项目(非虚拟主机)

直接说你用的 Tomcat 版本和 Debian 版本即可。

0 踩