只是使用Spring Cloud Gateway,我目前使用以下路线代理远程站点(在Kotlin中定义):
@GetMapping("/proxgoo/**")
@Throws(Exception::class)
fun proxyPath(proxy: ProxyExchange<*>): ResponseEntity<*> {
val path = proxy.path("/proxgoo/")
return proxy.uri(proxiedRemote.toString() + "/" + path).get()
}
哪个很好用。如果我们将proxiedRemote
设置为https://www.google.com
,这将很有效,直到我们尝试加载外部资源(如图片)。
问题在于:
http://localhost:8081/logos/doodles/2018/**
真的应该出去:
http://localhost:8081/proxgoo/logos/doodles/2018/**
我在想,如果我可以将 Referer 标题http://localhost:8081/proxgoo/
的所有内容重定向到代理路由,那么这就是我需要的所有内容:
所以,实际的问题。我认为以下配置会使用请求标头 Referer = http://localhost:8081/proxgoo/
重定向所有内容,但它不会提取它。我做过傻事吗?
spring:
cloud:
gateway:
routes:
- id: redirect_on_referer
predicates:
- Header=Referer,http://localhost:8081/proxgoo/
filters:
- RedirectTo=302, http://localhost:8081/proxgoo/
答案 0 :(得分:0)
在routes
下,您应该可以到达那里:
- id: redirect_on_referer
uri: http://localhost:8081
predicates:
- Header=Referer, http://localhost:8081/proxgoo/
filters:
- RewritePath=/(?<segment>.*), /proxgoo/$\{segment}