我目前正在使用API网关来集中对REST API的调用。我们正在使用Spring Cloud(Edgware.SR3版本)和Zuul(1.3.0)来处理服务发现和Consul作为服务注册表。
在第一个版本中,使用zuul.routes.myApiName.url在网关配置中注册了通往每个服务的路由,并且运行正常。
然后,我们想使用动态路由来允许每个API具有多个实例。
我为此删除了zuul.routes.myApiName.url。 问题是我通过网关对API的调用返回并出现错误:
错误请求主机和端口的这种组合需要TLS。
以下是在Consul中注册的API的配置:
spring.cloud.discovery.enabled=true
spring.cloud.consul.host=@consul_host_ip@
spring.cloud.consul.port=@consul_host_port@
spring.cloud.consul.discovery.scheme=https
这是网关中Zuul路由的配置:
zuul.host.socket-timeout-millis=60000
zuul.add-proxy-headers=false
zuul.ignored-services=*
zuul.routes.myApiName.path=/myApiName/**
zuul.routes.myApiName.serviceId=myApiName
API已在Consul中正确注册,并且运行状况检查已成功使用HTTPS:
HTTP GET https://hostname:port/health: 200 Output: {"description":"Composite Discovery Client","status":"UP"}
由于我能够使用HTTPS直接调用我的API,因此证书的配置也很好。 但是看来Zuul重定向使用的是HTTP而不是HTTPS(如果我使用HTTP以直接模式(无网关)调用API,则会遇到相同的错误)。
我已经为此苦苦挣扎了一段时间,所以我想知道是否缺少配置来强迫Zuul在对API的路由调用中使用HTTPS?
谢谢!
答案 0 :(得分:0)
只需配置
zuul.addProxyHeaders = false
Zuul在将任何请求转发到后端时添加了代理标头。
答案 1 :(得分:0)
我终于找到了解决方案:我必须添加此属性:
ribbon.IsSecure=true