服务启动时收到的IP地址为127.0.0.1,而不是本地IP地址

0

【以下的问题经过翻译处理】 背景:

我们在AWS上运行了许多Windows操作系统上的负载均衡服务器,使用C# .NET(5)。我们有一个Web服务器应用程序以及一个在同一台机器上运行的Windows服务,我们在Windows服务的日志记录方面存在问题。

问题描述:

由于我们有许多运行负载均衡的服务器,我们将日志流命名为私有IP,以区分哪台机器可能存在问题。这个私有IP是在应用程序启动时提取的(对于Windows服务和Web服务器都是如此)。通常情况下,这是成功的,但昨天我们遇到了一个问题,其中一个Windows服务日志流的标签显示为127.0.0.1,而不是本地IP号码。最终,我能够确定是哪台服务器,重新启动了Windows服务,使新的日志流名称中显示了私有IP号码。

可能的原因和解决方案:

我猜这是一个竞争条件错误。在AWS网络之前,该机器尚未收到其私有IP号码,我们的服务就要求获得它。**如果是这样,我们可以等待真实的IP出现,以确保我们在日志中获取正确的IP号码。**我有三个与此相关的问题:问题:

您是否看到除我提出的原因外,IP号码127.0.0.1出现的其他原因? 是否有比我提出的更好的解决方案? 是否有一种方法,使用AWS API之类的方式来获取服务器的公有IP? 以下是我们在这种情况下如何提取私有IP地址的代码:var hostName = System.Net.Dns.GetHostName(); var ipAddresses = System.Net.Dns.GetHostAddresses(hostName); var ipv4Address = ipAddresses.FirstOrDefault(ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork);

profile picture
专家
已提问 6 个月前32 查看次数
1 回答
0

【以下的回答经过翻译处理】 1、我认为您的假设是正确的。 2、您可以像您建议的那样操作。但为什么不使用实例元数据服务来检索实例ID呢?这将更加独特,并且可以避免实例重新使用过去某个时候的IP地址的问题。 3、使用实例ID,您可以查询EC2控制平面;找到已附加的网络接口;然后找到关联的公有/弹性IP地址。但是,这些服务器位于负载均衡器后面,因此(很可能)不会有单独的公有IP。

profile picture
专家
已回答 6 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则