宝塔面板不提供Tomcat9安装选项,需手动部署官方二进制包;配置Nginx反向代理时须透传完整URI、禁用rewrite,并由Java应用处理路由,静态资源应由Nginx直接返回。
宝塔面板里根本不能直接安装 Tomcat9
宝塔软件商店只提供 Tomcat8(截至 2024 年底最新版仍为
),没有
选项。强行点“安装”只会失败或静默跳过——这不是你操作问题,是官方没上架。想用 Tomcat9,必须手动部署。
手动安装 Tomcat9 的最小可行步骤
别碰源码编译,直接用官方二进制包最稳。以 CentOS 7/8 或 Ubuntu 20.04+ 为例:
用宝塔终端执行:
改权限:
开放端口(如用 8080):
(CentOS)或
(Ubuntu),然后重载防火墙
启动验证:
,访问
看是否显示 Tomcat 默认页
注意:
依赖系统已装 JDK8+,宝塔自带的 JDK 通常够用;若报
,在
里加一行:
(路径以宝塔实际 JDK 位置为准)。
Nginx 反向代理到 Tomcat9 的关键配置项
宝塔站点设置里“反向代理”功能生成的配置,默认不处理 Tomcat 的路径重写和静态资源缓存,容易导致 CSS/JS 404 或伪静态失效。必须手改配置:
Nginx
在宝塔面板中轻松管理Nginx高性能Web服务器。提供可视化配置反向代理、负载均衡、SSL证书及HTTP缓存功能,一键优化高并发性能,助您高效搭建稳定、快速的网站运行环境。
下载
进入站点 → 配置文件,在
块内替换为以下内容:
如果应用依赖路径前缀(比如部署在
下),
必须带尾部斜杠:
,且 Tomcat 的
中
要保持一致
伪静态本质是 URL 重写,Tomcat 本身不支持 Nginx 那种
指令;真正起作用的是后端 Java 应用(如 Spring Boot)的路由机制,Nginx 这层只需透传请求,别做多余 rewrite
为什么“伪静态”在 Tomcat 场景下常被误解
用户搜“Tomcat 伪静态”,往往其实是想让
这样的地址被 Spring MVC 或其他框架正确识别,而不是真要 Nginx 改写 URL。这时候:
宝塔反向代理配置里加任何
规则(比如把
转成
)都是错的——Tomcat 不吃这套,后端也收不到原始路径
正确做法:确保 Nginx 透传完整 URI,然后由 Java 应用自己解析路径;Spring Boot 默认就支持,无需额外配置
唯一需要 Nginx 干的,是把静态资源(
、
、
)直接返回,避免走 Tomcat:在配置里加一个
块,用
指向静态目录并
Tomcat9 自身没有 .htaccess 或类似机制,所有“URL 美化”逻辑都在应用层。别在 Nginx 层试图模拟 Apache 那套规则,越配越乱。
tomcat8.5.96Tomcat9wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.96/bin/apache-tomcat-9.0.96.tar.gz && tar -xzf apache-tomcat-9.0.96.tar.gz -C /www/server/ && mv /www/server/apache-tomcat-9.0.96 /www/server/tomcat9chown -R www:www /www/server/tomcat9firewall-cmd --permanent --add-port=8080/tcpufw allow 8080/www/server/tomcat9/bin/startup.shhttp://你的IP:8080startup.shJAVA_HOME not set/www/server/tomcat9/bin/setenv.shexport JAVA_HOME=/www/server/jdklocation /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;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}/myappproxy_passhttp://127.0.0.1:8080/myapp/server.xmlContext pathrewrite/article/123rewrite/article/(.*)/index.jsp?id=$1.js.css.pnglocation ~* \.(js|css|png|jpg|gif|ico)$rootexpires 1y