我有一个在端口 80 上运行的 httpd 服务器和在端口 3838 上运行的 Shiny -server。当我尝试时,我得到了在 Shiny -server上提供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
Run Code Online (Sandbox Code Playgroud)
和结果 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
Run Code Online (Sandbox Code Playgroud)
从 中可以看出getent ahosts localhost
,localhost 的 IPv6 条目优先于 IPv4 条目。(见man getent
和man nss
,如果你想知道为什么这个命令帮助)。
Curl 是双栈的,可以解析 IPv6 和 IPv4 地址,所以它使用 IPv6 地址。但是闪亮的服务器不适用于 IPv6,因此它超时,直接使用 IPv6 地址时已验证。OTOH,如果你使用127.0.0.1
,这是一个 IPv4 地址,所以它成功了。