我有一个Spring Boot 2.0.2应用程序。当我浏览到以下网址: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
}
}
}正如你所看到的,内容是OK的,但是所有的链接都以'http‘开头,而不是以https开头。尽管如此,我还是使用HTTPS访问URL。
我尝试访问的域名是AWS Route 53记录,其别名是AWS ELB。此ELB将呼叫重定向到属于K8S群集的目标。pod本身运行的是Nginx,它将URL重定向到另一个pod,后者运行Spring Boot并嵌入Tomcat,并使用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协议
发布于 2018-09-14 16:08:28
我通过在configuration类中添加以下代码块解决了这个问题:
@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头被正确处理)
https://stackoverflow.com/questions/52077013
复制相似问题