我正在本地开发机器上构建 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 无法运行,因此这可能是您的问题。
在这种情况下我要检查两件事:
- 检查服务器/服务是否仅在 IPv6 上运行。如果是,请将其更改为同时在 IPv4 和 IPv6 上运行。
- 检查防火墙规则,确保它们允许 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.1
。localhost
很奇怪!如果比我聪明的人知道这是如何实现的,请发表评论 :)!可能与上面的答案有关。