如何让Spring Boot嵌入式Tomcat返回基本URL的200 OK状态码?

3

我的应用程序部署在http://123.87.65.23:8080,上下文路径是/myapp,在application.properties中进行配置。因此,如果我访问http://123.87.65.23:8080,会返回404错误页面。但如果我访问http://123.87.65.23:8080/myapp/health,则会正常返回200。

我们的运维团队监控基本URL(http://123.87.65.23:8080)是否返回200 OK状态码。我有两个选项:

  1. 当我访问 http://123.87.65.23:8080 时返回200 OK状态码,不需要响应。

  2. 或者在我的Spring Boot应用程序中代理请求http://123.87.65.23:8080http://123.87.65.23:8080/myapp/health

注意:我正在使用嵌入式Tomcat,因此更改server.xml的选项不适用。

我不知道如何执行这些选项。

3个回答

2
如果您在您的.properties文件中设置了contextPath属性,那么Spring将执行它应该执行的操作,所有内容都会被移动到那里。
如果您将应用程序打包为.war并在外部服务器上运行,则可以设置该服务器以将根请求重定向到您的Spring Boot应用程序内的任何URL。
如果您将应用程序打包为可运行的.jar,并且带有嵌入式服务器并且您想保留.properties级别的contextPath,则
a)您仍然需要一些能够捕获根请求并重定向到您的Spring Boot应用程序的外部服务器
b)您需要设置两个不同的DispatcherServlets,其中一个的contextPath是/myapp,另一个的contextPath是/,它将重定向到您的Spring Boot应用程序
然而,最简单的解决方案是删除contextPath,并只需在每个Controller的@RequestMapping前加上/myapp,在management.context-path下将所有管理端点移动到/myapp,并编写一个映射到/的单个@Controller方法,该方法重定向到health端点。

1
在Tomcat容器中,您的应用程序应该部署到名为"ROOT"的目录中,而不是"myapp",如果您想要使用根URL。我猜您的Dispatcherservlet可能配置为处理/health请求,而您只需要处理/。或者您可能有一个映射到/health的控制器。没有代码就无法提供更多信息。

1
如果您想在http://123.87.65.23:8080请求中获得200,您需要在webapps文件夹中拥有一个名为ROOT.war的应用程序。
因此,http://123.87.65.23:8080http://123.87.65.23:8080/myapp是两个不同的应用程序。
我建议您两个选项:
  1. 将您的应用程序部署为http://123.87.65.23:8080(ROOT.war)
  2. 使用一些代理服务器,如nginx或apache。您可以配置代理服务器以将所有ROOT请求重定向到您的应用程序。
以下是一些nginx的示例:
location / {
    proxy_pass http://123.87.65.23:8080/myapp/;
}

或者只返回200:
location / {
    return 200;
}

1
我正在使用嵌入式Tomcat。因此,对我来说,使用root.war不是一个选项。 - brain storm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接