curl连接本地端口80失败。

41

我的主机文件将 127.0.0.1 映射到 localhost

$ curl -I 'localhost'
curl: (7) Failed to connect to localhost port 80: Connection refused

然后

$ curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.2.4
Date: Wed, 09 Apr 2014 04:20:47 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 23 Oct 2012 21:48:34 GMT
Connection: keep-alive
Accept-Ranges: bytes

在我的主机文件中,我有以下内容:

127.0.0.1   localhost

看起来curl命令无法识别/etc/hosts中的条目。有人能解释一下为什么吗?

更新:我还没有尝试过这个方法,但我发现你可以配置nginx来响应IPv4和IPv6


你也有 ::1 localhost 吗? - Joachim Isaksson
是的,我有 ::1 localhost - lfender6445
2
如果你有多个本地主机行,那么在这种情况下它可能使用你不希望使用的那个(即::1)。 - Joachim Isaksson
7个回答

63

由于您的hosts文件中有::1 localhost行,因此curl似乎正在尝试使用IPv6与本地Web服务器通信。

由于Web服务器未侦听IPv6,因此连接失败。

您可以尝试使用--ipv4选项来使用curl,这应该会在两个IP都可用时强制使用IPv4连接。


在执行bin/generate-example-metrics脚本向imply的PIVOT接口进行POST时,这对我也起作用了。 - ciacicode
我曾经遇到过相同的问题,尽管添加ipv4标志可以解决问题,但对我起作用的另一件事是从“/etc/hosts”中删除::1。 - Gokul

17
如果其他人遇到同样的问题,而且已接受的答案无法解决问题(这对我来说不起作用),请检查是否需要指定除80端口以外的其他端口。在我的情况下,我正在localhost:3000上运行rails服务器,只是使用了curl http://localhost命令,它连接到了端口80。
将命令更改为curl http://localhost:3000是我解决问题的方法。

非常感谢!我已经解决了Docker中的健康检查问题。 - Kai - Kazuya Ito
如果你在代理后面,请确保使用以下命令:export no_proxy=localhost,127.0.0.1 - smwikipedia

5
在我的情况下,文件~/.curlrc配置了错误的代理。

天啊!!!你帮我节省了很多时间来解决curl失败的问题。非常感谢你!!! - SHUMING LU

2

我也遇到了端口80拒绝连接的问题。我没有使用localhost。

curl --data-binary "@/textfile.txt" "http://www.myserver.com/123.php"

问题在于我的文本文件.txt中有umlauts äåö。

0
在我的情况下,当我添加了 resolver、events、root 和 upstream 到 nginx.conf 文件时,问题得到了解决(也许对某些人有用)。这是我修复错误后的 nginx.conf 文件:
worker_processes  1;
events {
  worker_connections  1024;
}    
http{
  upstream back-stream {
    server back:8080;
  }
  server {
    listen 80;
    listen [::]:80;
    server_name test.com www.test.com;
    location / {
      root   /usr/share/nginx/html;
      resolver 121.0.0.11;
      proxy_pass http://back-stream;
    }
  }
}

我的docker-compose文件:
version: '3.9'
services:
  nginx-proxy:
    image: nginx:stable-alpine
    container_name: nginx-proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    networks:
       - network
  back:
    image: "mycustomimage"
    container_name: back
    restart: unless-stopped
    ports:
      - '81:8080'
    networks:
       - network
networks:
  network:
    driver: bridge

0
有时候你需要确保Web 服务器正在运行。在我的情况下,我忘记在停止它后启动 nginx Web 服务器了。
sudo service nginx status

先开始吧:

sudo service nginx start

注意:如果您使用的是apache2,请将nginx替换为它。
curl localhost

0

我之前在我的负载均衡服务器上遇到了同样的错误。我正在使用两个服务器和一个负载均衡器。在我的两个服务器上,我运行着NginX,但是在负载均衡器上我安装了Haproxy。我发现Nginx被意外地安装在了LB上。解决方案:

sudo rm /etc/nginx/nginx.conf
sudo rm -rf /etc/nginx/
sudo apt purge nginx
sudo service haproxy restart

然后再次运行命令:curl -I localhost


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接