Ubuntu系统配置Tomcat虚拟主机步骤
在配置虚拟主机前,需确保系统已安装Java(Tomcat依赖)和Tomcat本身。以Tomcat 10为例,操作如下:
sudo apt update && sudo apt install openjdk-11-jdk -y,验证安装是否成功(java -version)。sudo apt install tomcat10 -y),或手动下载解压(如从Apache官网下载tar.gz文件,解压至/opt/tomcat目录)。tomcat系统用户并赋予权限(sudo useradd -r tomcat && sudo chown -R tomcat:tomcat /opt/tomcat)。sudo systemctl start tomcat10 && sudo systemctl enable tomcat10),并通过netstat -tnulp | grep java确认端口(默认8080)监听正常。虚拟主机的核心配置在Tomcat的server.xml文件中(路径:/etc/tomcat10/server.xml或/opt/tomcat/conf/server.xml)。需修改<Engine>节点,添加<Host>子节点,每个<Host>代表一个虚拟主机。
name属性:虚拟主机的域名(如site1.example.com),需与后续DNS或本地hosts解析一致。appBase属性:该虚拟主机的应用部署目录(如/opt/tomcat/webapps/site1),用于存放WAR包或Web应用文件。unpackWARs和autoDeploy:设为true可实现WAR包自动解压和部署(生产环境建议关闭autoDeploy以提升安全性)。Context节点:指定虚拟主机的根应用路径(path=""表示根路径),docBase指向具体应用目录(如/opt/tomcat/webapps/site1/ROOT)。Alias(可选):为虚拟主机添加别名(如www.site1.example.com),无需额外配置<Host>。Valve(可选):添加访问日志(如记录IP、请求时间、URL等),便于排查问题。<Engine name="Catalina" defaultHost="localhost">
<!-- 默认虚拟主机(可选保留) -->
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<!-- 虚拟主机1:site1.example.com -->
<Host name="site1.example.com" appBase="/opt/tomcat/webapps/site1"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/opt/tomcat/webapps/site1/ROOT" />
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="site1_access" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<!-- 虚拟主机2:site2.example.com -->
<Host name="site2.example.com" appBase="/opt/tomcat/webapps/site2"
unpackWARs="true" autoDeploy="true">
<Alias>www.site2.example.com</Alias>
<Context docBase="/var/www/site2/webapps/ROOT" />
</Host>
</Engine>
修改完成后,保存文件。
根据server.xml中的appBase和docBase配置,创建对应的目录并设置权限:
sudo mkdir -p /opt/tomcat/webapps/site1/ROOT
sudo mkdir -p /opt/tomcat/webapps/site2/ROOT
sudo mkdir -p /var/www/site2/webapps/ROOT
ROOT目录下创建index.jsp(或其他应用文件),例如:echo "<h1>Welcome to Site1</h1>" | sudo tee /opt/tomcat/webapps/site1/ROOT/index.jsp
echo "<h1>Welcome to Site2</h1>" | sudo tee /opt/tomcat/webapps/site2/ROOT/index.jsp
tomcat)对目录有读写权限:sudo chown -R tomcat:tomcat /opt/tomcat/webapps/site1
sudo chown -R tomcat:tomcat /opt/tomcat/webapps/site2
sudo chown -R tomcat:tomcat /var/www/site2/webapps
若未绑定公网域名,需通过本地hosts文件将虚拟主机域名映射到服务器IP(如192.168.1.100):
echo "192.168.1.100 site1.example.com" | sudo tee -a /etc/hosts
echo "192.168.1.100 site2.example.com" | sudo tee -a /etc/hosts
此步骤仅用于本地测试,生产环境需通过DNS服务商配置域名解析。
sudo systemctl restart tomcat10)。tail -f /opt/tomcat/logs/site1_access.log)。http://site1.example.com:8080和http://site2.example.com:8080,若看到对应的测试页面,说明配置成功。server.xml中的<Connector port="8080">为port="80",并确保无其他服务占用。<Host>节点内添加SSL连接器(参考Tomcat官方文档配置SSL证书)。appBase和docBase目录的权限正确,避免Tomcat无法读取应用文件。autoDeploy(设为false),使用Tomcat Manager或CI/CD工具部署应用;配置防火墙允许80/443端口(sudo ufw allow 80/tcp && sudo ufw allow 443/tcp)。