为什么 localhost 在给定端口上无法解析为 127.0.0.1?

为什么 localhost 在给定端口上无法解析为 127.0.0.1?

我有一个在端口 80 上运行的 httpd 服务器闪亮服务器在端口 3838 上运行。当我尝试时,curl 127.0.0.1:3838我得到了闪亮服务器上提供的索引文件。但是当我尝试curl localhost:3838curl 超时而没有检索任何内容时。为什么?

以下是我的 /etc/hosts 文件的内容:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
<my-ipv4-address> www.<mywebsite>.com <mywebsite>.com
<my-ipv6-address> www.<mywebsite>.com <mywebsite>.com

和结果getent ahosts localhost

::1             STREAM localhost
::1             DGRAM  
::1             RAW    
127.0.0.1       STREAM 
127.0.0.1       DGRAM  
127.0.0.1       RAW    

答案1

从 中可以看出getent ahosts localhost,localhost 的 IPv6 条目优先于 IPv4 条目。 (如果您想知道为什么此命令有帮助,请参阅man getent和)。man nss

Curl是双栈的,可以同时解析IPv6和IPv4地址,因此它使用IPv6地址。但是shiny server不支持IPv6,所以会超时,直接使用IPv6地址时已验证。 OTOH,如果您使用127.0.0.1,这是一个 IPv4 地址,所以它会成功。

答案2

您需要检查您的 shyni 服务器如何准确侦听(ipv4 或 pv6 或两者):

netstat -pantu |grep LIST

这一定是与使用“localhost”的限制有关的问题,也许......

答案3

要修复它,请添加到/etc/hosts

127.0.0.1 localhost shiny myWebsiteName

(我们将其附加到现有行)。


甚至更好。

配置您的网络服务器以侦听127.0.0.2,然后添加到/etc/hosts

127.0.0.2 shiny myWebsiteName

(在 Debian 8 和 9 上测试)

相关内容