温馨提示×

如何在Ubuntu上配置JSP虚拟主机

小樊
46
2025-12-20 04:20:08
栏目: 云计算

在 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)

  • 启用模块并创建站点配置:
    sudo a2enmod proxy proxy_http
    sudo nano /etc/apache2/sites-available/example.conf
    内容示例:
    <VirtualHost *:80>
      ServerName example.com
      ServerAlias www.example.com
      ProxyPreserveHost On
      ProxyPass        /  http://127.0.0.1:8080/
      ProxyPassReverse /  http://127.0.0.1:8080/
      ErrorLog  ${APACHE_LOG_DIR}/example_error.log
      CustomLog ${APACHE_LOG_DIR}/example_access.log combined
    </VirtualHost>
    
  • 启用站点并重启:sudo a2ensite example.conf && sudo systemctl reload apache2。
  • 防火墙放行:sudo ufw allow ‘Apache Full’(或 sudo ufw allow 80,443/tcp)。
  • 说明:此方式对外仅暴露 80/443,Tomcat 仍运行在 8080,便于多站点与统一 HTTPS 管理。

四 域名 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 实例/应用路径。

0