首页 > 解决方案 > 无法通过 vpn 通过机器名称访问 Rest Endpoint

问题描述

我面临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

或通过邮递员

http://my_machine_name:8761/actuator/beans

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

在此处输入图像描述

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

标签: spring-bootmicroservicesvpnresttemplatenetflix-eureka

解决方案


我已经修复了上述错误。如果你用 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 地址而不是机器名称以使其正常工作。


推荐阅读