我已经为API服务器构建了一个节点js代码。部分功能之一是,它在启动时应该能够知道自己的IP,尽管它运行的服务器的设置类型不同。在所有场景中查找节点js服务器的外部IP地址
经典场景并不难(我认为)。有几个选项,例如使用os模块并查找ip或外部接口。我相信还有其他方法,有些可能会更好,但这是我迄今为止所做的方式。随意添加尽可能丰富的信息。
有这种情况,我偶然发现。在一种情况下,网络服务器在谷歌云实例上运行。这个实例有两个IP,一个是内部的,一个是外部的。我想要的是外部IP。但是,当我使用上述方法时,实际的外部IP不是返回对象的一部分。内部知识产权被宣布为被视为非内部知识产权。即使当我在服务器命令行中运行不同的命令时,唯一返回的IP也是实际上是内部的,并且不能用于访问节点服务器。
据我所知,实例本身并不知道它是外部IP。可能有一个DNS(我认为)会将对外部IP的请求重定向到正确的实例。
在互联网上阅读时,我发现在使用负载平衡或代理时,获取服务器的正确外部IP的问题也可能会增加。
我想过的解决方案是让节点js代码向我将构建的服务发出请求。此服务将把节点js服务器视为客户端,并将返回其外部IP。从我所做的实验中,req对象包含客户IP的信息。所以我应该先检查req.connection.remoteAddress然后req.headers ['x-forwarded-for']的第一个元素。理想情况下,服务器将向自己发出请求,但
我知道有外部API,例如https://api.ipify.org?format=json这样做 - 返回实际的IP。但我非常希望节点js服务器独立于我无法控制的服务。
但是,我真的希望有比从服务器返回服务器IP请求更好的解决方案。
不幸的是,服务器没有办法让所有的配置都知道它的公有IP,而不需要询问外部观察者(比如你引用的服务)。 –
你最后提出了什么解决方案? – EMX
@EMX:我最终创建了自己的服务,迄今为止已证明可以用于我们测试过的场景。 –