在 Ubuntu 上配置 JSP 虚拟主机
一 准备环境
- 安装 JDK(以 OpenJDK 11 为例):sudo apt update && sudo apt install -y openjdk-11-jdk;验证:java -version、javac -version。
- 安装 Tomcat 9(Ubuntu 仓库包):sudo apt install -y tomcat9 tomcat9-admin;验证:sudo systemctl status tomcat9,访问 http://服务器IP:8080。
- 可选:安装 Apache HTTP Server 作为反向代理(更贴近“虚拟主机”的传统用法):sudo apt install -y apache2。
二 方案一 Tomcat 内置虚拟主机(推荐)
- 编辑 /etc/tomcat9/server.xml,在 <Engine name=“Catalina” …> 内新增 (示例域名为 example.com):
<Host name="example.com" appBase="webapps-example"
unpackWARs="true" autoDeploy="true">
<Alias>www.example.com</Alias>
<Context path="" docBase="/var/www/example" reloadable="true"/>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"/>
</Host>
说明:
- appBase 指向实例目录(相对于 $CATALINA_HOME),用于部署 WAR;
- docBase 指向外部目录(如 /var/www/example)放你的 JSP 文件;
- 通过 Alias 配置多域名;
- Valve 可限制仅本地访问管理页面(可按需放宽)。
- 创建站点目录并放置测试页:
sudo mkdir -p /var/www/example
sudo chown -R tomcat9:tomcat9 /var/www/example
在 /var/www/example/index.jsp 写入:<%@ page contentType="text/html;charset=UTF-8" %>
<html><body><h1>Hello from <%= request.getServerName() %></h1></body></html>
- 重启 Tomcat:sudo systemctl restart tomcat9。
- 本地测试(/etc/hosts):echo “127.0.0.1 example.com www.example.com” | sudo tee -a /etc/hosts,浏览器访问 http://example.com:8080。
- 生产发布:将 WAR 放入 /var/lib/tomcat9/webapps-example/(对应 appBase),或更新 docBase 指向你的应用目录。
三 方案二 使用 Apache 反向代理承载虚拟主机(端口 80/443)
四 域名 DNS 与防火墙
- 在域名 DNS 控制台添加 A 记录:主机名 @ 与 www 指向服务器公网 IP。
- 防火墙:
- 仅 Tomcat 直连:sudo ufw allow 8080/tcp;
- 使用 Apache 反向代理:sudo ufw allow ‘Apache Full’。
五 常见问题与排查
- 端口占用:ss -tlnp | grep 8080;必要时调整 Tomcat server.xml 的 。
- 权限问题:确保 /var/www/example 归属 tomcat9:tomcat9,否则 JSP 无法编译/写入。
- 日志定位:
- Tomcat:/var/log/tomcat9/catalina.out、/var/log/tomcat9/localhost*.log;
- Apache:/var/log/apache2/error.log、access.log。
- 仅本地管理界面:保留 RemoteAddrValve 限制;对外网开放管理有安全风险。
- 多站点:重复“新增 ”或新增 Apache 虚拟主机并分别反向代理到不同 Tomcat 实例/应用路径。