首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring Boot执行器页面返回http链接,而不是https

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

Stack Overflow用户
提问于 2018-08-29 20:04:44
回答 1查看 443关注 0票数 5

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

代码语言:javascript
运行
复制
{
    "_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
        }
    }
}

正如你所看到的,内容是OK的,但是所有的链接都以'http‘开头,而不是以https开头。尽管如此,我还是使用HTTPS访问URL。

我尝试访问的域名是AWS Route 53记录,其别名是AWS ELB。此ELB将呼叫重定向到属于K8S群集的目标。pod本身运行的是Nginx,它将URL重定向到另一个pod,后者运行Spring Boot并嵌入Tomcat,并使用HTTP和端口8080提供其内容。

对于Nginx,有一个代理传递配置:

代码语言:javascript
运行
复制
location /my-application-name { proxy_pass http://my-application-name; }

正在添加以下标头:

代码语言:javascript
运行
复制
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;

..。这样Spring Boot就会知道“原始”请求。

有人知道我哪里做错了吗?看起来执行器实现没有考虑到HTTPS协议

EN

Stack Overflow用户

发布于 2018-09-14 16:08:28

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

代码语言:javascript
运行
复制
@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头被正确处理)

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52077013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档