因为使用了Nginx,针对请求的Client IP进行限流时有问题
所有请求获取到的ip地址都为同一个地址172.*.*.*,(应用部署在docker容器内)。
看了下com.alibaba.csp.sentinel.adapter.gateway.sc.ServerWebExchangeItemParser#getRemoteAddress的方法,获取ip时使用的代码是
public String getRemoteAddress(ServerWebExchange exchange) {
InetSocketAddress remoteAddress = exchange.getRequest().getRemoteAddress();
return remoteAddress == null ? null : remoteAddress.getAddress().getHostAddress();
}
是否可以自定义获取请求ip地址?或者可以让sentinel得到代理后真实请求ip的方法
1条答案
按热度按时间vvppvyoh1#
这种不改源码的情况下,看样子是只能自己临时实现一个GatewayFilter了。我这打算提交一个可配置RequestItemParser的PR,这样就只需要自己配置一下获取remoteAddress逻辑即可