在阿里云轻量应用服务器上使用 Tomcat 部署多个网站(即多个 Web 应用)是完全可行的。Tomcat 支持通过 虚拟主机(Virtual Host) 的方式部署多个域名对应的网站,每个网站可以独立运行。
以下是详细的步骤和配置方法:
✅ 前提条件
- 已购买并登录阿里云轻量应用服务器。
- 已安装 Java 和 Tomcat(推荐 Tomcat 8 或以上版本)。
- 拥有多个域名,并已解析到服务器公网 IP。
- 服务器安全组已开放 80/443 端口(HTTP/HTTPS)。
🔧 步骤一:准备多个 Web 应用
每个网站对应一个独立的 Web 应用(WAR 包或解压后的目录),例如:
/webapps/
├── site1/ --> 第一个网站(如:www.site1.com)
├── site2/ --> 第二个网站(如:www.site2.com)
└── ROOT/ --> 默认网站(可选)
你也可以直接将 WAR 包放入 webapps/ 目录,Tomcat 会自动解压。
🛠 步骤二:修改 Tomcat 配置文件 server.xml
路径通常为:$CATALINA_HOME/conf/server.xml
1. 配置 <Engine> 下的多个 <Host>
在 <Engine name="Catalina" ...> 标签内添加多个 <Host>,每个代表一个虚拟主机。
<Engine name="Catalina" defaultHost="localhost">
<!-- 默认主机 -->
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="ROOT" />
</Host>
<!-- 虚拟主机 1 -->
<Host name="www.site1.com" appBase="webapps/site1" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/opt/tomcat/webapps/site1" />
</Host>
<!-- 虚拟主机 2 -->
<Host name="www.site2.com" appBase="webapps/site2" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/opt/tomcat/webapps/site2" />
</Host>
</Engine>
⚠️ 注意:
appBase是该虚拟主机的应用基础目录,建议使用绝对路径。docBase指向实际的 Web 应用目录。path=""表示根路径访问(即无需子路径)。- 如果不想用
appBase自动部署,可将其设为空,并只靠Context加载。
✅ 更推荐的做法:不依赖 appBase,统一管理
你可以将所有应用放在 webapps 下,然后通过 Context 显式指定:
<Host name="www.site1.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/opt/tomcat/webapps/site1" />
</Host>
<Host name="www.site2.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/opt/tomcat/webapps/site2" />
</Host>
这样更清晰,避免混淆。
🌐 步骤三:配置域名解析与 Nginx(推荐)
虽然 Tomcat 可以直接监听 80 端口,但生产环境建议使用 Nginx 做反向X_X,好处包括:
- 支持 HTTPS(SSL)
- 静态资源高效处理
- 多域名管理更方便
示例 Nginx 配置(每个站点一个 server 块)
server {
listen 80;
server_name www.site1.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name www.site2.com;
location / {
proxy_pass http://127.0.0.1:8081; # 若不同端口运行多个 Tomcat 实例
# 或仍指向 8080,由 Tomcat 虚拟主机区分
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
💡 提示:Tomcat 会根据请求头中的
Host字段匹配对应的<Host>,所以确保 Nginx 转发时保留Host头。
🔄 步骤四:重启 Tomcat 和 Nginx
# 重启 Tomcat
$CATALINA_HOME/bin/shutdown.sh
$CATALINA_HOME/bin/startup.sh
# 重启 Nginx
sudo systemctl restart nginx
🧪 步骤五:测试访问
在浏览器中分别访问:
- http://www.site1.com
- http://www.site2.com
确保 DNS 已正确解析到服务器 IP。
🔐 可选:配置 HTTPS(Let’s Encrypt)
使用 Certbot 为每个域名申请免费 SSL 证书:
sudo certbot --nginx -d www.site1.com -d www.site2.com
Nginx 会自动配置 HTTPS 并重定向 HTTP。
📌 注意事项
- 端口占用:确保 8080(Tomcat)、80/443(Nginx)端口未被占用。
- 防火墙:检查轻量服务器控制台的安全组规则,放行 80 和 443。
- Context 路径:
path=""表示作为根应用,否则会变成/xxx子路径。 - 性能考虑:单个 Tomcat 实例支持多个网站没问题,但高并发建议拆分服务或使用集群。
✅ 总结
| 方式 | 说明 |
|---|---|
| 单 Tomcat + 虚拟主机 | 简单,适合中小项目 |
| Nginx + Tomcat 反向X_X | 推荐生产环境使用 |
| 多 Tomcat 实例 | 隔离性好,但资源消耗大 |
如有需要,我可以提供完整的 server.xml 示例或 Nginx 配置模板。
是否需要我帮你生成一个完整的配置文件?
云计算导航