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
相关产品推荐
相关产品推荐

