You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat10部署两个Spring Boot WAR应用的资源路径适配方案咨询

解决方案

1. 固定Spring Boot应用的上下文路径

在两个Spring Boot WAR项目的配置文件(application.properties或application.yml)中分别指定上下文路径:

  • app1配置:server.servlet.context-path=/app1
  • app2配置:server.servlet.context-path=/app2
    这样Tomcat直接访问http://localhost:8080/app1时,应用能正确识别自身的上下文路径,不会出现资源找不到的问题。

2. 调整Nginx反向代理规则

修改Nginx的虚拟主机配置,确保域名请求能正确映射到Tomcat的上下文路径,同时处理好路径跳转:

example.com 代理配置

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:8080/app1/;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        # 重写后端返回的跳转路径,把/app1/替换为根路径/
        proxy_redirect http://localhost:8080/app1/ /;
    }
}

bbs.example.com 代理配置

server {
    listen 80;
    server_name bbs.example.com;

    location / {
        proxy_pass http://localhost:8080/app2/;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect http://localhost:8080/app2/ /;
    }
}

注意proxy_pass末尾的斜杠,它会让Nginx把请求的URI追加到/app1/之后,比如用户访问example.com/js/app.js,实际会转发到http://localhost:8080/app1/js/app.js;proxy_redirect则会把后端返回的包含/app1/的跳转地址替换为/,避免前端看到上下文路径。

3. 统一前端资源引用方式

不要使用硬编码的绝对路径(比如/css/style.css),改用以下方式:

  • 相对路径:去掉路径开头的斜杠,比如用css/style.css,这样资源会基于当前页面的URL路径去加载,适配两种访问场景。
  • 模板引擎动态生成路径:如果用Thymeleaf,写@{/css/style.css};如果用JSP,写${pageContext.request.contextPath}/css/style.css。这些方式会自动获取当前应用的上下文路径,拼接出正确的资源地址。

4. 验证效果

  • 域名访问:打开example.com,页面静态资源会通过Nginx转发到Tomcat的/app1路径下,加载正常。
  • 直接Tomcat访问:打开http://localhost:8080/app1,页面资源会自动带上/app1前缀,能正确加载静态资源。

内容的提问来源于stack exchange,提问作者peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 04:07:15