无法通过 vpn 按机器名称访问 Rest Endpoint

Not able to access Rest Endpoint by machine name over vpn

我遇到了 Rest Endpoint 的问题。当我尝试使用机器名称而不是 localhost 访问 url 时,出现 Access Denied 错误 。它只会在 VPN 连接 上出现此错误,否则它在没有 VPN 的情况下工作正常。

我的浏览器没有同样的问题。浏览器能够识别 url 与机器名称。只有当我试图通过 Java 代码或 Postman

在同一台机器上的不同微服务 上使用任何 端点 运行 时才会出现此问题

例如,如果我正在使用 Java 中的某个端点。

restTemplate.getForEntity("http://localhost:8761/actuator/beans", Object.class).getBody()
//Working fine

restTemplate.getForEntity("http://my_machine_name:8761/actuator/beans", Object.class).getBody()
//Access denied

或通过 Postman

http://my_machine_name:8761/actuator/beans

错误:连接 EACCES 192.xxx.x.x:8761

我主要使用 Discovery Client 来识别机器名称和端口,这样我就不需要在 localhost 中硬编码 url。我正在使用 FeignClient 作为负载均衡器,但看起来 restTemplate 也出现了同样的错误。

我已经修复了上面的错误。如果你用 VPN 连接你的机器,它会改变你的网络。所以你需要找到你的机器正在使用哪个IP地址。在命令提示符下尝试 ipconfig 以在 Windows.

中查找 IP 地址

如果您提供您的机器名称而不是上面的 IP 地址,那么它将无法找到您的机器,因为您的机器名称在您的网络中不可用(因为 VPN 连接)。

machine.ip.address=XX.66.223.XXX
eureka.client.service-url.default-zone=http://${machine.ip.address}:8761/eureka
eureka.instance.hostname=${machine.ip.address}

在您的 URL 中提供您的网络 ip 地址而不是机器名称以使其工作。