Spring Boot执行器页面返回http链接而不是https

时间:2018-08-29 12:04:44

标签: spring-boot

我有一个Spring Boot 2.0.2应用程序。当我浏览到以下URL:https://my-domain-name/my-application-name/actuator时,得到以下输出:

{
    "_links": {
        "self": {
            "href": "http://my-domain-name/my-application-name/actuator",
            "templated": false
        },
        "health": {
            "href": "http://my-domain-name/my-application-name/actuator/health",
            "templated": false
        },
        "info": {
            "href": "http://my-domain-name/my-application-name/actuator/info",
            "templated": false
        }
    }
}

如您所见,内容确定,但所有链接均以“ http”开头,而不是以https开头。不过,我正在使用HTTPS访问URL。

我要访问的域名是一个AWS Route 53记录,带有一个AWS ELB的别名。该ELB将呼叫重定向到目标,即K8S集群。 Pod本身正在运行Nginx,它将URL重定向到另一个Pod,后者使用嵌入式Tomcat运行Spring Boot,并使用HTTP和端口8080提供内容。

对于Nginx,有一个代理通过配置:

location /my-application-name { proxy_pass http://my-application-name; }

正在添加以下标题:

proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;

...,以便Spring Boot知道“原始”请求。

有人知道我在做什么错吗?似乎执行器的实现没有考虑HTTPS协议

1 个答案:

答案 0 :(得分:1)

我通过在配置类中添加以下代码块来解决了这个问题:

@Bean
public FilterRegistrationBean forwardedHeaderFilterRegistration() {
    ForwardedHeaderFilter filter = new ForwardedHeaderFilter();
    FilterRegistrationBean<ForwardedHeaderFilter> registration = new FilterRegistrationBean<>(filter);
    registration.setName("forwardedHeaderFilter");
    registration.setOrder(10000);
    return registration;
}

似乎ForwardedHeaderFilter确实考虑了X-Forwarded-Proto标头。尽管仍然不清楚为什么执行器默认情况下不执行此操作(因为其他X-Forwarded标头已得到正确处理)

相关问题