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