http://localhost:3000 有效,但 http://127.0.0.1:3000 无效

http://localhost:3000 有效,但 http://127.0.0.1:3000 无效

我正在本地开发机器上构建 Rails 应用程序。运行本地服务器时,我可以http://localhost:3000毫无问题地访问。但是,当我尝试导航到 时http://127.0.0.1:3000,我得到了ERR_CONNECTION_REFUSED。通常,我不会关心这个问题,但是当我尝试使用 访问隧道时ngrok,我得到了这个错误:

Tunnel <URL> unavailable

Unable to initiate connection to 127.0.0.1:3000. A web server must be running on port 127.0.0.1:3000 to complete the tunnel.

今天早上我全新安装了 OS X,系统上唯一运行的就是我的点文件自述文件。这是我的完整/etc/hosts文件:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost 

答案1

在您的 hosts 文件中,您有 IPv4 和 IPv6 解析。当今大多数操作系统在可用时会优先使用 IPv6。由于 localhost 可以运行,而 127.0.0.1 无法运行,因此这可能是您的问题。

在这种情况下我要检查两件事:

  1. 检查服务器/服务是否仅在 IPv6 上运行。如果是,请将其更改为同时在 IPv4 和 IPv6 上运行。
  2. 检查防火墙规则,确保它们允许 IPv4 和 IPv6 在该端口上访问本地主机。

答案2

TLDL;确保sudo lsof -i tcp:<port>同一端口上没有其他进程在运行。(sudo if necessary) kill -9如果有的话。


我刚遇到这个问题,其他答案对我没有太大帮助。我有一个 nginx 反向代理,前端和后端服务器都在 docker 容器中运行。

用户在同一端口上运行着另一个进程,root但出于某种原因,该进程并未通过端口绑定来干扰 Docker Compose。当我localhost在地址栏中点击时,它会正确路由到nginx从我的容器运行。当我转到时,127.0.0.1它却不会。

我注意到了这个问题,即使关闭了我自制安装的 nginx 和运行 nginx 的 docker 容器后,我仍然在 Chrome 和 FireFox 上收到来自 nginx 的 502 Bad Gateway。

检查 8082 后(使用 SUDO),我看到root有一个进程在同一个端口上运行。关闭该进程后,我能够127.0.0.1再次使用 和连接到我的 docker 服务localhost

我假设这127.0.0.1实际上是导航到该进程(下面的 143)而不是我的 docker 容器,所以我实际上是使用 和 访问了两个不同的 web 服务器进程127.0.0.1localhost很奇怪!如果比我聪明的人知道这是如何实现的,请发表评论 :)!可能与上面的答案有关。

在此处输入图片描述

相关内容