您如何为 Spring Boot Actuator 配置基础 url,以便它由基础端点返回?
How can you configure the base url for Spring Boot Actuator so it is returned by the base endpoint?
Spring Boot 的执行器基本端点 returns json 带有所有已启用端点的 href 链接。所有链接都默认为 localhost:8080,但我使用 machine.mydomain.com.
等主机名进行了身份验证
如何获取链接以填充 https://machine.mydomain.com instead of http://localhost:8090?
我访问时执行器的示例输出
https://machine.mydomain.com/actuator
/ 20181012150557
// https://machine.mydomain.com/actuator
{
"_links": {
"self": {
"href": "http://localhost:8090/actuator",
"templated": false
},
"beans": {
"href": "http://localhost:8090/actuator/beans",
"templated": false
},
"health": {
"href": "http://localhost:8090/actuator/health",
"templated": false
}
}
我想要的是
/ 20181012150557
// https://machine.mydomain.com/actuator
{
"_links": {
"self": {
"href": "https://machine.mydomain.com/actuator",
"templated": false
},
"beans": {
"href": "https://machine.mydomain.com/actuator/beans",
"templated": false
},
"health": {
"href": "https://machine.mydomain.com/actuator/health",
"templated": false
}
}
我 运行 遇到了与我的应用程序相同的问题。 Spring Boot 使用当前请求 URL 在执行器主页上生成超媒体链接。
见WebMvcEndpointHandlerMapping
:
@Override
@ResponseBody
protected Map<String, Map<String, Link>> links(HttpServletRequest request,
HttpServletResponse response) {
return Collections.singletonMap("_links",
this.linksResolver.resolveLinks(request.getRequestURL().toString()));
}
如果您使用代理(Apache、nginx),真实请求 URL 可能会移动到 X-Forwarded-*
headers。最简单的解决方案是为执行器端点添加 Spring 的 ForwardedHeaderFilter
,如下所示:
@Bean
public FilterRegistrationBean forwardedHeaderFilter() {
final FilterRegistrationBean<ForwardedHeaderFilter> filter = new FilterRegistrationBean<>(new ForwardedHeaderFilter());
filter.setName("Forwarded Header filter");
filter.setUrlPatterns(Collections.singletonList("/actuator/*"));
return filter;
}
Spring Boot 的执行器基本端点 returns json 带有所有已启用端点的 href 链接。所有链接都默认为 localhost:8080,但我使用 machine.mydomain.com.
等主机名进行了身份验证如何获取链接以填充 https://machine.mydomain.com instead of http://localhost:8090?
我访问时执行器的示例输出 https://machine.mydomain.com/actuator
/ 20181012150557
// https://machine.mydomain.com/actuator
{
"_links": {
"self": {
"href": "http://localhost:8090/actuator",
"templated": false
},
"beans": {
"href": "http://localhost:8090/actuator/beans",
"templated": false
},
"health": {
"href": "http://localhost:8090/actuator/health",
"templated": false
}
}
我想要的是 / 20181012150557 // https://machine.mydomain.com/actuator
{
"_links": {
"self": {
"href": "https://machine.mydomain.com/actuator",
"templated": false
},
"beans": {
"href": "https://machine.mydomain.com/actuator/beans",
"templated": false
},
"health": {
"href": "https://machine.mydomain.com/actuator/health",
"templated": false
}
}
我 运行 遇到了与我的应用程序相同的问题。 Spring Boot 使用当前请求 URL 在执行器主页上生成超媒体链接。
见WebMvcEndpointHandlerMapping
:
@Override
@ResponseBody
protected Map<String, Map<String, Link>> links(HttpServletRequest request,
HttpServletResponse response) {
return Collections.singletonMap("_links",
this.linksResolver.resolveLinks(request.getRequestURL().toString()));
}
如果您使用代理(Apache、nginx),真实请求 URL 可能会移动到 X-Forwarded-*
headers。最简单的解决方案是为执行器端点添加 Spring 的 ForwardedHeaderFilter
,如下所示:
@Bean
public FilterRegistrationBean forwardedHeaderFilter() {
final FilterRegistrationBean<ForwardedHeaderFilter> filter = new FilterRegistrationBean<>(new ForwardedHeaderFilter());
filter.setName("Forwarded Header filter");
filter.setUrlPatterns(Collections.singletonList("/actuator/*"));
return filter;
}